我正在寻找与语言无关的代码复制工具.很容易找到特定于语言的代码复制工具(用于Java,C,PHP,...),但我想在自定义语法中对模板运行一些代码复制分析.
我不关心语法的高级解析,只是基于直线的原始字符串比较是好的.空白不敏感匹配将是一个加号,但不是必需的.(我自己规范化/消除空白并不难.)
有没有人知道可以(误)用于这样的工具?
谢谢.
language-agnostic code-analysis static-analysis code-duplication duplicates
我会先尝试一下这个问题.我们有一个构建到大型文件树的项目.构建是几百MB,包含许多(小)文件,其中只有一小部分在构建之间发生变化.我们希望保留这些构建的一些历史记录,为了有效地执行此操作,我们希望硬链接在构建之间不会更改的文件.为此,我们使用rsync
(作为更强大的兄弟cp
),从本地源到本地目标,可以选择--link-dest
执行硬链接魔法.
这适用于增量构建:大多数文件都没有被触及,rsync
并且硬链接正确.使用完全重新编译构建(我们必须这样做是出于与此无关的原因),事情似乎没有按预期工作.由于重新编译,所有文件都获得了新的时间戳,但在内容方面,大多数文件仍然与之前的版本相同.但是,即使我们使用rsync
与--checksum
选项(所以rsync
基于内容的"同步" /硬链接,而不是文件大小+时间戳)说,没有东西了硬链接.
我试图通过这个简单的(bash)脚本来隔离/说明问题:
echo "--- Start clean"
rm -fr src build*
echo "--- Set up src"
mkdir src
echo hello world > src/helloworld.txt
echo "--- First copy with src as hardlink reference"
rsync -a --checksum --link-dest=$(pwd)/src src/ build1/
echo "--- Second copy with first copy as hardlink reference"
rsync -a --checksum --link-dest=$(pwd)/build1 src/ build2/
echo "--- Result (as expected)"
ls -ali src/helloworld.txt build*/helloworld.txt
echo …
Run Code Online (Sandbox Code Playgroud) 我正在处理一个多子模块项目中的一个奇怪的“UnboundLocalError:分配前引用的局部变量”问题,并将其精简为这个片段(使用标准库中的日志模块):
import logging
def foo():
logging.info('foo')
def bar():
logging.info('bar')
if False:
import logging.handlers
# With these alternatives things work:
# import logging.handlers as logginghandlers
# from logging.handlers import SocketHandler
logging.basicConfig(level=logging.INFO)
foo()
bar()
Run Code Online (Sandbox Code Playgroud)
有这个输出(我试过 python 2.7 和 3.3):
INFO:root:foo
Traceback (most recent call last):
File "import-test01.py", line 16, in <module>
bar()
File "import-test01.py", line 7, in bar
logging.info('bar')
UnboundLocalError: local variable 'logging' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
显然,即使没有执行导入,函数内部的 import 语句也会隐藏函数作用域中已经存在的同名变量。
这感觉违反直觉和非 Pythonic。我试图找到一些关于此的信息或文档,但到目前为止没有取得太大的成功。有人对这种行为有更多的信息/见解吗?
谢谢
我们有这个HBase集群:30多个节点,48个表,HDFS级别40 + TB,复制因子2.由于两个节点上的磁盘故障,我们在HDFS上有一个损坏的文件.
hdfs fsck /
输出摘录,显示损坏的HBase区域文件:
/user/hbase/table_foo_bar/295cff9c67379c1204a6ddd15808af0b/n/ae0fdf7d0fa24ad1914ca934d3493e56:
CORRUPT blockpool BP-323062689-192.168.12.45-1357244568924 block blk_9209554458788732793
/user/hbase/table_foo_bar/295cff9c67379c1204a6ddd15808af0b/n/ae0fdf7d0fa24ad1914ca934d3493e56:
MISSING 1 blocks of total size 134217728 B
CORRUPT FILES: 1
MISSING BLOCKS: 1
MISSING SIZE: 134217728 B
CORRUPT BLOCKS: 1
The filesystem under path '/' is CORRUPT
Run Code Online (Sandbox Code Playgroud)
丢失的数据无法恢复(磁盘已损坏).
据HBase说,一切都很好,花花公子
hbase hbck
说:
Version: 0.94.6-cdh4.4.0
...
table_foo_bar is okay.
Number of regions: 1425
Deployed on: ....
...
0 inconsistencies detected.
Status: OK
Run Code Online (Sandbox Code Playgroud)
此外,似乎我们仍然可以查询来自损坏区域文件的非丢失块的数据(据我所知,我能够根据该区域的开始和结束行键进行检查).
hadoop fs -rm
或 hadoop fsck -delete /
).这将"修复"HDFS级别的损坏. …假设我有这些HBase表,它们在HBase webui中描述为:
test_foo {NAME => 'test_foo', FAMILIES => [{NAME => 'fam'}]}
test_bar {NAME => 'test_bar', FAMILIES => [{NAME => 'fam', TTL => '1000'}]}
Run Code Online (Sandbox Code Playgroud)
如何解除test_bar
桌面上的TTL ?