精简版
我想弄清楚如何获取项目的日期。我感兴趣的日期是 SourceSafe 用户界面中显示的日期:
在此示例中,日期为2020 年 6 月 9 日上午 11:49
长版
使用 Microsoft Visual SouceSafe COM API,您可以访问IVssItem
:
//InterfaceID: {2A0DE0EA-2E9F-11D0-9236-00AA00A1EB95}
public interface IVSSItem
{
public string Spec { get; set; }
public Boolean Binary { get; set; }
public Boolean Deleted { get; set; }
public VSSItemType Type { get; }
public String LocalSpec { get; set; }
public String Name { get; set; }
public IVSSItem Parent { get; }
public Int32 VersionNumber { get; }
public IVSSItems Items(Boolean IncludeDeleted) { get; }
public void Get(ref String Local; VSSFlags iFlags);
public void Checkout(String Comment, String Local, VSSFlags iFlags);
public void Checkin(String Comment, String Local, VSSFlags iFlags);
public UndoCheckout(String Local, VSSFlags iFlags);
public VSSFileStatus IsCheckedOut { get; }
public IVSSCheckouts Checkouts { get; }
public Boolean IsDifferent(String Local) { get; }
public IVSSItem Add(String Local, String Comment, VSSFlags iFlags);
public IVSSItem NewSubproject(String Name, String Comment);
public void Share(IVSSItem pIItem: IVSSItem, String Comment, VSSFlags iFlags);
public void Destroy();
public void Move(IVSSItem pINewParent);
public void Label(String Label, String Comment);
public IVSSVersions Versions(VSSFlags iFlags) { get; }
public IVSSItem Version(VARIANT Version) { get; }
public IVSSItems Links { get; }
public IVSSItem Branch(String Comment, VSSFlags iFlags);
}
问题是我看不到任何访问可以在 SourceSafe 用户界面中看到的日期的方法。
研究
Johannnes Knaupp 在 2001 年提出了同样的问题。在该线程中,有人建议查找项目日期的方法是查看最后一个IVssVersion的日期。
IVSSVersion
确实有一个日期:
//InterfaceID {783CD4E8-9D54-11CF-B8EE-00608CC9A71F}
public interface IVSSVersion
{
String Username { get; }
Int32 VersionNumber { get; }
String Action { get; }
DateTime Date { get; } <--------------------
String Comment { get; }
String Label { get; }
String IVSSItem VSSItem { get; }
}
很遗憾:
- 那不是文件的日期
- 那是采取行动的日期
这甚至可以在 SourceSafe 用户界面中看到:
并且可以通过API确认。
约翰内斯早在 2001 年就注意到了这一点:
这些日期不相同:
在 10:05 创建的文件可以在 10:08 签入。
更重要的是,IVssVersion.Date
这并不代表对文件的更改。它代表采取了一些行动:
- “添加”
- “存档”
- “存档版本”
- “版本分支”
- “入住”
- “创造”
- “已删除”
- “毁了”
- “贴上标签”
- “搬来”
- “搬去”
- “固定到版本”
- “清除”
- “恢复”
- “改名为”
- “恢复”
- “回滚到版本”
- “共享”
- “未固定”
更糟:
- 如果我从今天开始添加文件
6/19/1999
- 行动日期将是“今天”
- 而不是
6/19/1999
所以问题是:
- 怎么做?
- 如何读取
DateTime
文件? - SourceSafe 用户界面是如何做到的?