我们之前有一个从Subversion转换过的Mercurial存储库,今天已经注意到存储库中的文件没有任何历史记录.
此行为的一个症状是hg status报告文件是干净的,而hg log报告没有相同文件的更改集:
> hg clone [repo]
> hg st -c FileWithMissingHistory.cs
C FileWithMissingHistory.cs
> hg blame FileWithMissingHistory.cs
FileWithMissingHistory.cs: no such file in rev [...]
> hg log FileWithMissingHistory.cs
> hg log FileWithMissingHistory.cs -f
abort: cannot follow nonexistent file: "FileWithMissingHistory.cs"
> hg log -v | grep FileWithMissingHistory.cs
[gives output, there arechangesets mentioning the file]
Run Code Online (Sandbox Code Playgroud)
显然,示例中的文件名已更改.我尝试过使用hg验证,但是这个命令报告说repo没问题.有没有人经历过这一点,有什么我们可以做的让历史"恢复生机"?在所讨论的文件上放置虚拟历史记录是可以接受的,但不是最理想的.
编辑: 我已经做了一些调查,并注意到"FileWithMissingHistory.cs"在修订版238中从另一个文件名(hg copy + delete)重命名.如果我执行hg update -r238并且hg登录此版本的文件我做没有任何历史.在原始文件上执行hg登录会按预期报告历史记录,因此在复制过程中似乎会以某种方式丢失历史记录(同样,使用hg副本重命名文件,并且变更集清楚地表明文件已被复制).
假设我有一个名为"myDevelopmentBranch"的功能的开发分支和另一个包含很多变化的分支"myOtherBranch",其中一些将与"myDevelopmentBranch"的内容冲突.将(可能)从"myDevelopmentBranch"合并到"myOtherBranch"的结果会不同于我经常提交的结果,而不是经常提交(例如,每天数次,而不是每周一次或两次)?我想知道这一点,因为我觉得Mercurial(或任何其他VCS)更容易跟踪小块的变化,从而更好地找出如何合并它们.
注意!我知道为什么人们应该经常提交的原因很多,这只是我一直在思考的一个技术问题.
是否可以使用LINQ将包含坐标元组(x,y)的双精度平面数组(即[x0,y0,...,xN,yN])转换为包含相同坐标的长度的一半的数组.Point-class,即[p0,...,pN]?
最好是.NET 3.5,但也对4.0感兴趣.
在c#中,我将获得运行系统上安装的所有打印机驱动程序的列表,例如Windows "添加打印机"向导:
我已经能够列出已经安装的打印机,但是如何列出系统上可用的驱动程序?
我查看了STL的前向迭代器.我在任何地方都看不到任何虚拟功能.如果我有一个想要字符串的前向迭代器的库,我怎么能让函数接受任何返回字符串的前向迭代器?我可以使用标准库中的任何内容吗?
如果我使用LINQ执行以下操作:
void DoSomeStuffWithHashSet()
{
HashSet<int> set = new HashSet<int>();
for (int i = 0; i < 100; ++i) set.Add(i);
if (Lookup(set, new Random().NextInt(200))
System.Console.WriteLine("Yey");
else
System.Console.WriteLine("Ney");
}
bool Lookup(IEnumerable<int> haystack, int needle)
{
// O(N) search or HashSet<int>.Contains()?
return Enumerable.Contains(collection, needle);
}
Run Code Online (Sandbox Code Playgroud)
将Enumerable.Contains()解析为优化的实现,HashSet或者无论输入如何都将执行简单的搜索?
我刚开始使用Qt(用C++编写),所以我按照我在网上找到的"你好,世界"的例子.我在目录hello中创建了程序hello.cpp:
#include <QtGui>
int main(int argc, char *argv[]) {
QApplication app (argc, argv);
QLabel label ("Hello, world!");
label.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我跑了:
qmake -project
qmake hello.pro
make
Run Code Online (Sandbox Code Playgroud)
一切都正确编译,我能够运行./hello.然后,作为一个冒险的人,我尝试修改文件:
#include <QtGui>
#include <QtWebKit>
int main(int argc, char *argv[]) {
QApplication app (argc, argv);
QLabel label ("Hello, world!");
QWebPage page;
label.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我重申了这三个命令,但现在当我运行make时,我收到以下错误:
hello.cpp:2: fatal error: QtWebKit: No such file or directory
compilation terminated.
make: *** [hello.o] Error 1
Run Code Online (Sandbox Code Playgroud)
我检查了Makefile,并将INCPATH变量定义为
INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I.
Run Code Online (Sandbox Code Playgroud)
它显然缺少-I/usr/include/qt4/QtWebKit.LIBS变量也缺少-lQtWebKit.手动添加这些会导致编译成功.我究竟做错了什么?我需要添加什么才能使qmake生成正确的Makefile?
我有一些代码可以创建一个Process实例,然后启动它.有一些逻辑需要检查Process是否已经启动.HasExited可用于检查是否已退出已启动的进程,但我找不到类似的功能HasStarted.乍一看StartTime看起来是一个不错的选择,但是如果进程退出,这个函数将抛出.此外,文档说StartTime只对启动的进程有意义.
确定流程是否已启动(已启动但可能已退出)的"正确"方法是什么?
这是一个令人讨厌的错误,花了我半个小时来解决.编译器认为这是有效的代码,当它评估语句时,它仍然会调用foo():
if(true && false);{ foo(); }
Run Code Online (Sandbox Code Playgroud)
为什么它有效,为什么foo()仍然被调用?
我已经浏览了http://dlang.org/cpp_interface.html,并且在所有示例中,即使是那些C++代码调用某些D代码的代码,主函数也驻留在D中(因此被调用的二进制文件是一个从D源文件编译).文档中的"从C++调用D"示例中有一个在D中定义的函数foo,它从C++中的函数栏调用,而bar又从D中的main函数调用.
是否可以从C++函数调用D代码?我正在尝试做类似以下的简单操作,但不断出现构建错误:
在D:
import std.stdio;
extern (C++) void CallFromCPlusPlusTest() {
writeln("You can call me from C++");
}
Run Code Online (Sandbox Code Playgroud)
然后在C++中:
#include <iostream>
using namespace std;
void CallFromCPlusPlusTest();
int main() {
cout << "hello world"<<"\n";
CallFromCPlusPlusTest();
}
Run Code Online (Sandbox Code Playgroud)