From 2f24e3777d15c04084366dbfc3736a43c5e7f2b9 Mon Sep 17 00:00:00 2001 From: govindsalinas Date: Fri, 22 Jun 2007 00:35:07 -0700 Subject: [PATCH] Got viewing files and diffing files (arbitrary commits) to work. Still need to do merge. The inability to checkout branches sucks right now. I should go and learn how checking out a branch works. --- FileUpdater.cs | 113 ++++++++++++++++++- Git/Branch.cs | 5 + Git/File.cs | 28 ++++- Git/Repo.cs | 46 ++++---- Git/Tag.cs | 5 + UI/CommitTable.Designer.cs | 1 + UI/CommitTable.cs | 12 +- UI/PreferencesEditor.cs | 6 + UI/RepoTreeView.cs | 3 +- UI/RevisionChooser.Designer.cs | 146 +++++++++++++++++++++++++ UI/RevisionChooser.cs | 60 ++++++++++ UI/{StatusViewer.resx => RevisionChooser.resx} | 6 - UI/StatusViewer.Designer.cs | 10 +- UI/StatusViewer.cs | 17 +++ UI/StatusViewer.resx | 2 +- Widgit.csproj | 10 ++ 16 files changed, 429 insertions(+), 41 deletions(-) create mode 100755 UI/RevisionChooser.Designer.cs create mode 100755 UI/RevisionChooser.cs copy UI/{StatusViewer.resx => RevisionChooser.resx} (91%) diff --git a/FileUpdater.cs b/FileUpdater.cs index 294c17e..9a419db 100755 --- a/FileUpdater.cs +++ b/FileUpdater.cs @@ -164,15 +164,22 @@ namespace Widgit ISelectable s = m_EventSourcesToSelectables[(IFileOperations)sender]; foreach (File f in s.GetSelected()) { + string path = SerializeRevision(f, null); + if (String.IsNullOrEmpty(m_prefs.ViewerApp)) { - string nativePath = f.PathWithName.Replace(Repo.DirectorySeparator, System.IO.Path.DirectorySeparatorChar.ToString()); System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo(); - si.FileName = m_currentRepo.Path + System.IO.Path.DirectorySeparatorChar + nativePath; + si.FileName = path; si.UseShellExecute = true; + System.Console.WriteLine(si.FileName + " " + si.Arguments); System.Diagnostics.Process p = new System.Diagnostics.Process(); + p.StartInfo = si; p.Start(); } + else + { + LaunchApp(m_prefs.ViewerApp, m_prefs.ViewerArgs, path, "", "", ""); + } } } @@ -185,13 +192,111 @@ namespace Widgit protected void OnDiffFile(object sender, EventArgs e) { ISelectable s = m_EventSourcesToSelectables[(IFileOperations)sender]; - + if (String.IsNullOrEmpty(m_prefs.DiffApp)) + { + return; + } + foreach (File f in s.GetSelected()) + { + Diff(f, null, f, "HEAD"); + } } protected void OnDiffHistoryFile(object sender, EventArgs e) { ISelectable s = m_EventSourcesToSelectables[(IFileOperations)sender]; - RevertFiles(s.GetSelected()); + if (String.IsNullOrEmpty(m_prefs.DiffApp)) + { + return; + } + + List files = s.GetSelected(); + if (files.Count < 0) + { + return; + } + RevisionChooser c = new RevisionChooser(); + string commitish = c.Choose(m_currentRepo); + if (null == commitish) + { + return; + } + foreach (File f in files) + { + Diff(f, null, f, commitish); + } + } + + + private string ReplaceOrAppend(string orig, string toReplace, string replaceWith) + { + if (orig.IndexOf(toReplace) < 0) + { + orig += " \"" + replaceWith + "\""; + } + else + { + orig = orig.Replace("[File]", "\"" + replaceWith + "\""); + } + return orig; + } + + protected string SerializeRevision(File f, string commitish) + { + string contents; + if (String.IsNullOrEmpty(commitish)) + { + string nativePath = f.PathWithName.Replace(Repo.DirectorySeparator, + System.IO.Path.DirectorySeparatorChar.ToString()); + nativePath = m_currentRepo.Path + System.IO.Path.DirectorySeparatorChar + nativePath; + return nativePath; + } + if (!f.GetRevision(commitish, out contents)) + { + return null; + } + string tmpFileName = System.IO.Path.GetTempFileName(); + System.IO.StreamWriter writer = new System.IO.StreamWriter(tmpFileName); + writer.Write(contents); + writer.Close(); + return tmpFileName; + } + + protected bool Diff(File file1, string commitish1, File file2, string commitish2) + { + if (null == file2) + { + file2 = file1; + } + + string nativePath1 = SerializeRevision(file1, commitish1); + if (null == nativePath1) + { + return false; + } + + string nativePath2 = SerializeRevision(file2, commitish2); + if (null == nativePath2) + { + return false; + } + return LaunchApp(m_prefs.DiffApp, m_prefs.DiffArgs, "", nativePath2, nativePath1, ""); + } + + protected bool LaunchApp(string execPath, string args, string file, string yours, string theirs, string target) + { + System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo(); + si.FileName = execPath; + args = ReplaceOrAppend(args, "[File]", file); + args = ReplaceOrAppend(args, "[Theirs]", theirs); + args = ReplaceOrAppend(args, "[Yours]", yours); + args = ReplaceOrAppend(args, "[Target]", target); + si.Arguments = args; + System.Console.WriteLine(si.FileName + " " + si.Arguments); + System.Diagnostics.Process p = new System.Diagnostics.Process(); + p.StartInfo = si; + p.Start(); + return true; } protected void OnCopyFiles(object sender, EventArgs e) diff --git a/Git/Branch.cs b/Git/Branch.cs index b889ee8..c1eeaa2 100755 --- a/Git/Branch.cs +++ b/Git/Branch.cs @@ -25,5 +25,10 @@ namespace Git m_hash = output.Trim(); return retval; } + + public override string ToString() + { + return Name; + } } } diff --git a/Git/File.cs b/Git/File.cs index b9a7d38..6c2c0ec 100644 --- a/Git/File.cs +++ b/Git/File.cs @@ -23,7 +23,9 @@ namespace Git public string Mode { get { return m_mode; } set { m_mode = value; } } protected string m_hash; - public string ID { get { return m_hash; } } + public string ID { get { return m_hash; } } + + protected string m_repoPath; protected string m_relPath; public string RelativePath { get { return m_relPath; } } @@ -67,9 +69,9 @@ namespace Git } - public File(string id, string relativePath) - { - m_hash = id; + public File(string repoPath, string relativePath) + { + m_repoPath = repoPath; int idx = relativePath.LastIndexOf(Repo.DirectorySeparator); if (idx < 0) { @@ -179,6 +181,24 @@ namespace Git return "renamed"; } return "unknown"; + } + + public bool GetRevision(out string contents) + { + return GetRevision("HEAD", out contents); + } + + public bool GetRevision(string commitish, out string contents) + { + if (String.IsNullOrEmpty(commitish)) + { + contents = null; + return false; + } + Executioner e = Executioner.GetExecutioner(m_repoPath, true); + + string error; + return 0 == e.Execute("git-show", commitish + ":" + m_pathWithName, "", out contents, out error); } } } diff --git a/Git/Repo.cs b/Git/Repo.cs index 6e8435c..ead0a26 100755 --- a/Git/Repo.cs +++ b/Git/Repo.cs @@ -210,23 +210,24 @@ namespace Git { Executioner e = Executioner.GetExecutioner(m_path, false); string output, error; - if (0 == e.Execute("git-branch", "", "", out output, out error)) + if (0 == e.Execute("git-branch", "-v --no-abbrev", "", out output, out error)) { m_branches.Clear(); foreach (string s in output.Split(m_lineSep, StringSplitOptions.RemoveEmptyEntries)) - { - string branchName = s.Trim(); - if (branchName.StartsWith("*")) - { - branchName = branchName.Substring(2); - branchName = branchName.Trim(); - m_CurrentBranch = new Branch(m_path, branchName); - m_branches.Add(m_CurrentBranch); - } - else + { + string flag = s.Substring(0, 1); + int idx = s.IndexOf(" ", 3); + string name = s.Substring(2, idx - 2); + while (s[idx] == ' ') ++idx; + int idx2 = s.IndexOf(" ", idx); + string hash = s.Substring(idx, (idx2 - idx)); + Branch b = new Branch(m_path, name); + b.ID = hash; + m_branches.Add(b); + if (flag == "*") { - m_branches.Add(new Branch(m_path, branchName)); - } + m_CurrentBranch = b; + } } return true; } @@ -237,12 +238,17 @@ namespace Git { Executioner e = Executioner.GetExecutioner(m_path, false); string output = null, error = null; - if (0 == e.Execute("git-rev-parse", "--symbolic --tags", "", out output, out error)) + if (0 == e.Execute("git-show-ref", "--tags", "", out output, out error)) { m_tags.Clear(); foreach (string s in output.Split(m_lineSep, StringSplitOptions.RemoveEmptyEntries)) - { - m_tags.Add(new Tag(s.Trim(), m_path)); + { + int idx = s.IndexOf(" "); + string hash = s.Substring(0, 40); + string name = s.Substring(41); + Tag t = new Tag(name, m_path); + t.ID = hash; + m_tags.Add(t); } return true; } @@ -336,12 +342,12 @@ namespace Git } } - private static Git.File UpdateMap(Dictionary filesMap, string type, string file) + private Git.File UpdateMap(Dictionary filesMap, string type, string file) { Git.File f; if (!filesMap.TryGetValue(file, out f)) { - f = new Git.File("", file); + f = new Git.File(m_path, file); filesMap.Add(file, f); } f.SetState(type); @@ -373,7 +379,7 @@ namespace Git File f; if (!files.TryGetValue(line, out f))//work around git reporting files twice sometimes { - f = new File(null, line); + f = new File(m_path, line); files.Add(line, f); } if (front == "?") @@ -394,7 +400,7 @@ namespace Git return (0 == e.Execute("git-read-tree", "--reset -u " + id)); } - public bool GetLog(Commit start, int count, out List commits) + public bool GetLog(Treeish start, int count, out List commits) { Executioner e = Executioner.GetExecutioner(m_path, true); string args = "-n " + count + Git.Commit.FormatString; diff --git a/Git/Tag.cs b/Git/Tag.cs index 3e69898..f515fdc 100755 --- a/Git/Tag.cs +++ b/Git/Tag.cs @@ -16,5 +16,10 @@ namespace Git { m_name = name; } + + public override string ToString() + { + return Name; + } } } diff --git a/UI/CommitTable.Designer.cs b/UI/CommitTable.Designer.cs index bbbd561..19fa017 100755 --- a/UI/CommitTable.Designer.cs +++ b/UI/CommitTable.Designer.cs @@ -112,6 +112,7 @@ namespace Widgit this.m_commitsView.Dock = System.Windows.Forms.DockStyle.Fill; this.m_commitsView.FullRowSelect = true; this.m_commitsView.Location = new System.Drawing.Point(0, 25); + this.m_commitsView.MultiSelect = false; this.m_commitsView.Name = "m_commitsView"; this.m_commitsView.Size = new System.Drawing.Size(388, 252); this.m_commitsView.TabIndex = 3; diff --git a/UI/CommitTable.cs b/UI/CommitTable.cs index 8820c99..78a275a 100755 --- a/UI/CommitTable.cs +++ b/UI/CommitTable.cs @@ -15,6 +15,11 @@ namespace Widgit protected Stack m_topCommits = new Stack(); protected Repo m_currentRepo; + public ListView.SelectedListViewItemCollection SelectedItems { get { return m_commitsView.SelectedItems; } } + + protected Treeish m_treeish; + public Treeish Treeish { get { return m_treeish; } set { m_treeish = value; } } + public CommitTable() { InitializeComponent(); @@ -33,8 +38,13 @@ namespace Widgit private void OnFetchCommits(object sender, EventArgs e) { + RepopulateTable(); + } + + public void RepopulateTable() + { List commits; - if (!m_currentRepo.GetLog(null, 100, out commits)) + if (!m_currentRepo.GetLog(m_treeish, 100, out commits)) { MessageBox.Show("Could not get commits.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; diff --git a/UI/PreferencesEditor.cs b/UI/PreferencesEditor.cs index 489484e..1069d7e 100755 --- a/UI/PreferencesEditor.cs +++ b/UI/PreferencesEditor.cs @@ -17,6 +17,12 @@ namespace Widgit m_prefs = p; InitializeComponent(); m_gitPath.Text = m_prefs.GitDir; + m_editor.Text = m_prefs.ViewerApp; + m_editorArgs.Text = m_prefs.ViewerArgs; + m_difftool.Text = m_prefs.DiffApp; + m_difftoolArgs.Text = m_prefs.DiffArgs; + m_mergeTool.Text = m_prefs.MergeApp; + m_mergetoolArgs.Text = m_prefs.MergeArgs; } protected string ChooseDir(bool bDirs) diff --git a/UI/RepoTreeView.cs b/UI/RepoTreeView.cs index 17b72e6..4767e43 100755 --- a/UI/RepoTreeView.cs +++ b/UI/RepoTreeView.cs @@ -130,7 +130,7 @@ namespace Widgit Git.File f; if (!m_knownFiles.TryGetValue(fullPath, out f)) { - f = new Git.File("", fullPath); + f = new Git.File(m_currentRepo.Path, fullPath); f.State = FileState.Normal; } AddNewFileNode(e.Node, f); @@ -266,6 +266,7 @@ namespace Widgit { if (e.Button == MouseButtons.Right) { + m_workspaceTree.SelectedNode = e.Node; m_opMenu.Show(m_workspaceTree, e.X, e.Y); } } diff --git a/UI/RevisionChooser.Designer.cs b/UI/RevisionChooser.Designer.cs new file mode 100755 index 0000000..3e9c18a --- /dev/null +++ b/UI/RevisionChooser.Designer.cs @@ -0,0 +1,146 @@ +namespace Widgit +{ + partial class RevisionChooser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.m_statusTable = new Widgit.CommitTable(); + this.m_branches = new System.Windows.Forms.ComboBox(); + this.m_tags = new System.Windows.Forms.ComboBox(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.m_statusTable); + this.groupBox1.Controls.Add(this.m_branches); + this.groupBox1.Controls.Add(this.m_tags); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(520, 276); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Choose Revision"; + // + // m_statusTable + // + this.m_statusTable.Location = new System.Drawing.Point(6, 88); + this.m_statusTable.Name = "m_statusTable"; + this.m_statusTable.Size = new System.Drawing.Size(508, 182); + this.m_statusTable.TabIndex = 5; + // + // m_branches + // + this.m_branches.FormattingEnabled = true; + this.m_branches.Location = new System.Drawing.Point(116, 61); + this.m_branches.Name = "m_branches"; + this.m_branches.Size = new System.Drawing.Size(121, 21); + this.m_branches.TabIndex = 4; + this.m_branches.SelectionChangeCommitted += new System.EventHandler(this.OnBranchSelected); + // + // m_tags + // + this.m_tags.FormattingEnabled = true; + this.m_tags.Location = new System.Drawing.Point(116, 18); + this.m_tags.Name = "m_tags"; + this.m_tags.Size = new System.Drawing.Size(121, 21); + this.m_tags.TabIndex = 3; + this.m_tags.SelectionChangeCommitted += new System.EventHandler(this.OnTagSelected); + // + // button1 + // + this.button1.DialogResult = System.Windows.Forms.DialogResult.OK; + this.button1.Location = new System.Drawing.Point(456, 313); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "OK"; + this.button1.UseVisualStyleBackColor = true; + // + // button2 + // + this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.button2.Location = new System.Drawing.Point(375, 313); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 2; + this.button2.Text = "Cancel"; + this.button2.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 21); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(34, 13); + this.label1.TabIndex = 6; + this.label1.Text = "Tags:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 64); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(55, 13); + this.label2.TabIndex = 7; + this.label2.Text = "Branches:"; + // + // RevisionChooser + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(544, 348); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.groupBox1); + this.Name = "RevisionChooser"; + this.Text = "RevisionChooser"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.ComboBox m_tags; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.ComboBox m_branches; + private CommitTable m_statusTable; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/UI/RevisionChooser.cs b/UI/RevisionChooser.cs new file mode 100755 index 0000000..8a4a02f --- /dev/null +++ b/UI/RevisionChooser.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Git; + +namespace Widgit +{ + public partial class RevisionChooser : Form + { + Repo m_currentRepo; + public RevisionChooser() + { + InitializeComponent(); + } + + private void OnBranchSelected(object sender, EventArgs e) + { + m_tags.SelectedIndex = 0; + if (!String.IsNullOrEmpty(m_branches.SelectedItem.ToString())) + { + m_statusTable.Treeish = ((Branch)m_branches.SelectedItem); + m_statusTable.RepopulateTable(); + } + } + + private void OnTagSelected(object sender, EventArgs e) + { + m_branches.SelectedIndex = 0; + if (!String.IsNullOrEmpty(m_tags.SelectedItem.ToString())) + { + m_statusTable.Treeish = ((Tag)m_tags.SelectedItem); + m_statusTable.RepopulateTable(); + } + } + + public string Choose(Repo repo) + { + m_currentRepo = repo; + m_statusTable.SetRepo(m_currentRepo); + m_branches.Items.Clear(); + m_branches.Items.Add(""); + m_branches.Items.AddRange(repo.Branches.ToArray()); + m_tags.Items.Clear(); + m_tags.Items.Add(""); + m_tags.Items.AddRange(repo.Tags.ToArray()); + if (DialogResult.OK == ShowDialog()) + { + if (m_statusTable.SelectedItems.Count == 1) + { + return ((Treeish)m_statusTable.SelectedItems[0].Tag).ID; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/UI/StatusViewer.resx b/UI/RevisionChooser.resx similarity index 91% copy from UI/StatusViewer.resx copy to UI/RevisionChooser.resx index af3b88f..ff31a6d 100755 --- a/UI/StatusViewer.resx +++ b/UI/RevisionChooser.resx @@ -117,10 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 17, 17 - - - 119, 17 - \ No newline at end of file diff --git a/UI/StatusViewer.Designer.cs b/UI/StatusViewer.Designer.cs index 76b3d3c..5c76dff 100755 --- a/UI/StatusViewer.Designer.cs +++ b/UI/StatusViewer.Designer.cs @@ -31,7 +31,7 @@ namespace Widgit this.m_statusList = new System.Windows.Forms.ListView(); this.columnHeader7 = new System.Windows.Forms.ColumnHeader(); this.m_toolbar = new Widgit.RepoToolStrip(); - this.fileOpMenu1 = new Widgit.FileOpMenu(); + this.m_opMenu = new Widgit.FileOpMenu(); this.SuspendLayout(); // // m_statusList @@ -45,6 +45,7 @@ namespace Widgit this.m_statusList.TabIndex = 2; this.m_statusList.UseCompatibleStateImageBehavior = false; this.m_statusList.View = System.Windows.Forms.View.Details; + this.m_statusList.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnRowClicked); // // columnHeader7 // @@ -61,9 +62,10 @@ namespace Widgit this.m_toolbar.TabIndex = 3; this.m_toolbar.Text = "repoToolStrip1"; // - // fileOpMenu1 + // m_opMenu // - this.fileOpMenu1.Name = "fileOpMenu1"; + this.m_opMenu.Name = "fileOpMenu1"; + this.m_opMenu.Size = new System.Drawing.Size(204, 202); // // StatusViewer // @@ -83,6 +85,6 @@ namespace Widgit private System.Windows.Forms.ListView m_statusList; private System.Windows.Forms.ColumnHeader columnHeader7; private RepoToolStrip m_toolbar; - private FileOpMenu fileOpMenu1; + private FileOpMenu m_opMenu; } } diff --git a/UI/StatusViewer.cs b/UI/StatusViewer.cs index 914e171..7c9f6a3 100755 --- a/UI/StatusViewer.cs +++ b/UI/StatusViewer.cs @@ -16,6 +16,10 @@ namespace Widgit ImageList m_imageList; public ImageList ImageList { get { return m_imageList; } set { m_imageList = value; m_statusList.SmallImageList = m_imageList; } } + public ListView.SelectedListViewItemCollection SelectedItems { get { return m_statusList.SelectedItems; } } + + public bool Multiselect { get { return m_statusList.MultiSelect; } set { m_statusList.MultiSelect = value; } } + protected FileUpdater m_updater; public FileUpdater FileUpdater { @@ -25,10 +29,12 @@ namespace Widgit { m_updater.FilesUpdated -= OnFilesUpdated; m_updater[m_toolbar] = null; + m_updater[m_opMenu] = null; } m_updater = value; m_updater.FilesUpdated += OnFilesUpdated; m_updater[m_toolbar] = (ISelectable)this; + m_updater[m_opMenu] = (ISelectable)this; } } @@ -103,5 +109,16 @@ namespace Widgit } return files; } + + private void OnRowClicked(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + ListViewItem i = m_statusList.GetItemAt(e.X, e.Y); + m_statusList.SelectedItems.Clear(); + i.Selected = true; + m_opMenu.Show(m_statusList, e.X, e.Y); + } + } } } diff --git a/UI/StatusViewer.resx b/UI/StatusViewer.resx index af3b88f..576d08f 100755 --- a/UI/StatusViewer.resx +++ b/UI/StatusViewer.resx @@ -120,7 +120,7 @@ 17, 17 - + 119, 17 \ No newline at end of file diff --git a/Widgit.csproj b/Widgit.csproj index 5738472..d582cdf 100755 --- a/Widgit.csproj +++ b/Widgit.csproj @@ -117,6 +117,10 @@ Designer RepoTreeView.cs + + Designer + RevisionChooser.cs + Designer StatusViewer.cs @@ -157,6 +161,12 @@ RepoTreeView.cs + + Form + + + RevisionChooser.cs + UserControl -- 2.11.4.GIT