现在,我们正在使用Perforce进行版本控制.它有一个方便的功能,我们可以用来引用构建的严格增加的更改号,例如"如果你的构建至少是44902,你将得到错误修复".
我想切换到使用分布式系统(可能是git),以便更容易分支和在家工作.(Perforce完全可以实现这两个目标,但是git工作流程有一些优势.)因此,尽管"支流开发"将被分发而不是参考通用的修订版,但我们仍然会维护一个主要的git repo,所有更改都会需要在创建构建之前加入.
保存严格增加的构建ID的最佳方法是什么?我能想到的最简单的方法是使用某种post-commit钩子,每当主repo更新时它就会触发,并且它注册(哈希)新树对象(或者提交对象?我是新手git)有一个集中的数据库,可以分发ID.(我说"数据库",但我可能会用git标签来做,只是寻找下一个可用的标签号或什么.所以"数据库"真的是.git/refs/tags/build-id /. )
这是可行的,但我想知道是否有更简单,或已经实现,或标准/"最佳实践"的方式来实现这一点.
我有一个'foreach'宏我经常在C++中使用,适用于大多数STL容器:
#define foreach(var, container) \
for(typeof((container).begin()) var = (container).begin(); \
var != (container).end(); \
++var)
Run Code Online (Sandbox Code Playgroud)
(注意'typeof'是gcc扩展名.)它的使用方式如下:
std::vector< Blorgus > blorgi = ...;
foreach(blorgus, blorgi) {
blorgus->draw();
}
Run Code Online (Sandbox Code Playgroud)
我想做一些类似迭代地图值的东西.也许称之为"foreach_value".所以不要写作
foreach(pair, mymap) {
pair->second->foo();
}
Run Code Online (Sandbox Code Playgroud)
我会写的
foreach_value(v, mymap) {
v.foo();
}
Run Code Online (Sandbox Code Playgroud)
我不能想出一个会这样做的宏,因为它需要声明两个变量:迭代器和值变量(上面的'v').我不知道如何在for循环的初始化器中做到这一点,即使使用gcc扩展.我可以在foreach_value调用之前声明它,但是它会与同一范围内的foreach_value宏的其他实例冲突.如果我可以将当前行号后缀为迭代器变量名,它可以工作,但我不知道该怎么做.
我真正在做的是尝试在设置或清除单个位时设置观察点。我通过在包含该位的字上设置一个观察点,然后使其成为条件*word & mask(用于设置或(~*word) & mask清除)来做到这一点。
问题是同一个字中的一些其他位可能会被修改,并且条件可能已经匹配。如果我有旧值和新值,我可以设置(($old ^ $new) & mask).
我查看了 pythongdb.Breakpoint类,但它似乎也没有收到此信息。
我想我可以发疯并设置一个命令列表,该列表在值*word更改时记录当前值,并将其用作$old. 但有一半时间我使用它,我实际上是通过 rr 使用它,所以我可能会倒退。