无聊的时候突然想要看看VSS里面都发生了什么,好下面看一下怎么看VSS里面的东东。
本篇没有参考什么,纯属自编,如果有什么不对的地方请提出。
作为延伸,你可以考虑一下怎么把指定的时间点的vss内容取出编译。
提示:代码不太规范,请勿仿照。
本篇没有参考什么,纯属自编,如果有什么不对的地方请提出。
作为延伸,你可以考虑一下怎么把指定的时间点的vss内容取出编译。
提示:代码不太规范,请勿仿照。
1using System;
2using System.Diagnostics;
3using System.Drawing;
4using System.Collections;
5using System.ComponentModel;
6using System.Threading;
7using System.Windows.Forms;
8using System.Data;
9using DevExpress.XtraTreeList;
10using DevExpress.XtraTreeList.Nodes;
11using SourceSafeTypeLib;
12
13namespace VssInfo
14{
15 /**//// <summary>
16 /// Summary description for Form1.
17 /// </summary>
18 public class Form1 : System.Windows.Forms.Form
19 {
20 private DevExpress.XtraTreeList.TreeList treeList1;
21 private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn1;
22 private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn2;
23 private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn3;
24 private System.Windows.Forms.Panel panel1;
25 private DevExpress.XtraEditors.ComboBoxEdit comboBoxEdit1;
26 private DevExpress.XtraEditors.SimpleButton simpleButton1;
27 private DevExpress.XtraEditors.RadioGroup radioGroup1;
28 private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn4;
29 /**//// <summary>
30 /// Required designer variable.
31 /// </summary>
32 private System.ComponentModel.Container components = null;
33
34 public Form1()
35 {
36 //
37 // Required for Windows Form Designer support
38 //
39 InitializeComponent();
40
41 //
42 // TODO: Add any constructor code after InitializeComponent call
43 //
44 }
45
46 private void ViewVSS(string srcsafeINI, string username, string password)
47 {
48 UIInvoke invoke = new UIInvoke(this);
49 invoke.DOLockReloadNodes();
50 invoke.DoClearNodes();
51 VSSDatabase database = new VSSDatabase();
52
53 database.Open(srcsafeINI, username, password);
54 IVSSItems items = database.get_VSSItem("$/", false).get_Items(false);
55
56 Loop(items);
57 invoke.DOUnlockReloadNodes();
58
59 System.Runtime.InteropServices.Marshal.ReleaseComObject(database);
60 database = null;
61
62 }
63
64 private void Loop(IVSSItems items )
65 {
66 foreach(IVSSItem item in items)
67 {
68 if(!item.Deleted)
69 {
70 if(item.Type == (int) VSSItemType.VSSITEM_FILE)
71 {
72
73 if(GetOPType == Type.CheckOut )
74 {
75 if(item.IsCheckedOut == (int) VSSFileStatus.VSSFILE_CHECKEDOUT || item.IsCheckedOut == (int) VSSFileStatus.VSSFILE_CHECKEDOUT_ME)
76 {
77 UIInvoke invoke = new UIInvoke(this);
78
79 invoke.Spec = item.Spec;
80
81 foreach(IVSSCheckout checkoutClass in item.Checkouts)
82 {
83 invoke.Username = checkoutClass.Username;
84 invoke.MachineName = checkoutClass.Machine;
85 invoke.Date = checkoutClass.Date.ToShortDateString();
86
87 }
88 invoke.Invoke();
89 }
90 }
91 else
92 {
93 IVSSVersions versions = item.get_Versions(0);
94 IEnumerator enumerator = versions.GetEnumerator();
95 while(enumerator.MoveNext())
96 {
97 IVSSVersion version =(IVSSVersion) enumerator.Current;
98
99
100 if(version.VersionNumber == item.VersionNumber)
101 {
102 if(version.Date.DayOfYear >= DateTime.Now.DayOfYear -1 && version.Date.DayOfYear <= DateTime.Now.DayOfYear )
103 {
104 UIInvoke invoke = new UIInvoke(this);
105
106 invoke.Spec = item.Spec;
107 invoke.Username = version.Username;
108 invoke.Date = version.Date.ToShortDateString();
109
110 foreach(IVSSCheckout checkoutClass in item.get_Version(item.VersionNumber).Checkouts)
111 {
112 invoke.MachineName = checkoutClass.Machine;
113 }
114 invoke.Invoke();
115 }
116 while(enumerator.MoveNext())
117 {
118
119 }
120
121
122 }
123
124 }
125 }
126 }
127
128 else
129 {
130 Loop(item.get_Items(false));
131 }
132 }
133
134
135 }
136
137 }
138
139
140 private class UIInvoke
141 {
142 public string Spec;
143 public string Username;
144 public string MachineName;
145 public string Date;
146 Form1 _form1;
147
148 delegate void MyInvoke();
149 public UIInvoke(Form1 form1)
150 {
151 _form1 = form1;
152 }
153 public void Invoke()
154 {
155 _form1.treeList1.Invoke(new MyInvoke(DOInvoke));
156 }
157 public void DOLockReloadNodes()
158 {
159 _form1.treeList1.Invoke(new MyInvoke(BeginUnboundLoad));
160 }
161 public void DOUnlockReloadNodes()
162 {
163 _form1.treeList1.Invoke(new MyInvoke(EndUnboundLoad));
164 }
165 public void DoClearNodes()
166 {
167 _form1.treeList1.Invoke(new MyInvoke(ClearNodes));
168 }
169
170 void BeginUnboundLoad()
171 {
172 _form1.treeList1.LockReloadNodes();
173 }
174 void EndUnboundLoad()
175 {
176 _form1.treeList1.UnlockReloadNodes();
177 }
178 void ClearNodes()
179 {
180 _form1.treeList1.ClearNodes();
181 }
182
2using System.Diagnostics;
3using System.Drawing;
4using System.Collections;
5using System.ComponentModel;
6using System.Threading;
7using System.Windows.Forms;
8using System.Data;
9using DevExpress.XtraTreeList;
10using DevExpress.XtraTreeList.Nodes;
11using SourceSafeTypeLib;
12
13namespace VssInfo
14{
15 /**//// <summary>
16 /// Summary description for Form1.
17 /// </summary>
18 public class Form1 : System.Windows.Forms.Form
19 {
20 private DevExpress.XtraTreeList.TreeList treeList1;
21 private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn1;
22 private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn2;
23 private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn3;
24 private System.Windows.Forms.Panel panel1;
25 private DevExpress.XtraEditors.ComboBoxEdit comboBoxEdit1;
26 private DevExpress.XtraEditors.SimpleButton simpleButton1;
27 private DevExpress.XtraEditors.RadioGroup radioGroup1;
28 private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn4;
29 /**//// <summary>
30 /// Required designer variable.
31 /// </summary>
32 private System.ComponentModel.Container components = null;
33
34 public Form1()
35 {
36 //
37 // Required for Windows Form Designer support
38 //
39 InitializeComponent();
40
41 //
42 // TODO: Add any constructor code after InitializeComponent call
43 //
44 }
45
46 private void ViewVSS(string srcsafeINI, string username, string password)
47 {
48 UIInvoke invoke = new UIInvoke(this);
49 invoke.DOLockReloadNodes();
50 invoke.DoClearNodes();
51 VSSDatabase database = new VSSDatabase();
52
53 database.Open(srcsafeINI, username, password);
54 IVSSItems items = database.get_VSSItem("$/", false).get_Items(false);
55
56 Loop(items);
57 invoke.DOUnlockReloadNodes();
58
59 System.Runtime.InteropServices.Marshal.ReleaseComObject(database);
60 database = null;
61
62 }
63
64 private void Loop(IVSSItems items )
65 {
66 foreach(IVSSItem item in items)
67 {
68 if(!item.Deleted)
69 {
70 if(item.Type == (int) VSSItemType.VSSITEM_FILE)
71 {
72
73 if(GetOPType == Type.CheckOut )
74 {
75 if(item.IsCheckedOut == (int) VSSFileStatus.VSSFILE_CHECKEDOUT || item.IsCheckedOut == (int) VSSFileStatus.VSSFILE_CHECKEDOUT_ME)
76 {
77 UIInvoke invoke = new UIInvoke(this);
78
79 invoke.Spec = item.Spec;
80
81 foreach(IVSSCheckout checkoutClass in item.Checkouts)
82 {
83 invoke.Username = checkoutClass.Username;
84 invoke.MachineName = checkoutClass.Machine;
85 invoke.Date = checkoutClass.Date.ToShortDateString();
86
87 }
88 invoke.Invoke();
89 }
90 }
91 else
92 {
93 IVSSVersions versions = item.get_Versions(0);
94 IEnumerator enumerator = versions.GetEnumerator();
95 while(enumerator.MoveNext())
96 {
97 IVSSVersion version =(IVSSVersion) enumerator.Current;
98
99
100 if(version.VersionNumber == item.VersionNumber)
101 {
102 if(version.Date.DayOfYear >= DateTime.Now.DayOfYear -1 && version.Date.DayOfYear <= DateTime.Now.DayOfYear )
103 {
104 UIInvoke invoke = new UIInvoke(this);
105
106 invoke.Spec = item.Spec;
107 invoke.Username = version.Username;
108 invoke.Date = version.Date.ToShortDateString();
109
110 foreach(IVSSCheckout checkoutClass in item.get_Version(item.VersionNumber).Checkouts)
111 {
112 invoke.MachineName = checkoutClass.Machine;
113 }
114 invoke.Invoke();
115 }
116 while(enumerator.MoveNext())
117 {
118
119 }
120
121
122 }
123
124 }
125 }
126 }
127
128 else
129 {
130 Loop(item.get_Items(false));
131 }
132 }
133
134
135 }
136
137 }
138
139
140 private class UIInvoke
141 {
142 public string Spec;
143 public string Username;
144 public string MachineName;
145 public string Date;
146 Form1 _form1;
147
148 delegate void MyInvoke();
149 public UIInvoke(Form1 form1)
150 {
151 _form1 = form1;
152 }
153 public void Invoke()
154 {
155 _form1.treeList1.Invoke(new MyInvoke(DOInvoke));
156 }
157 public void DOLockReloadNodes()
158 {
159 _form1.treeList1.Invoke(new MyInvoke(BeginUnboundLoad));
160 }
161 public void DOUnlockReloadNodes()
162 {
163 _form1.treeList1.Invoke(new MyInvoke(EndUnboundLoad));
164 }
165 public void DoClearNodes()
166 {
167 _form1.treeList1.Invoke(new MyInvoke(ClearNodes));
168 }
169
170 void BeginUnboundLoad()
171 {
172 _form1.treeList1.LockReloadNodes();
173 }
174 void EndUnboundLoad()
175 {
176 _form1.treeList1.UnlockReloadNodes();
177 }
178 void ClearNodes()
179 {
180 _form1.treeList1.ClearNodes();
181 }
182