Beispiel #1
0
        //////////////////////////////////////////////////////////////////////////////

        private void UpdateFolder()
        {
            if (ItemListView.SelectedRows.Count == 0)
            {
                return;
            }

            int     selectedIndex = ItemListView.Rows.IndexOf(ItemListView.SelectedRows[0]);
            SvnItem folder        = folders[selectedIndex];

            if (Config.ChangeLogBeforeUpdate && (folder.reviewedRevision < SvnTools.GetRepositoryHeadRevision(folder)))
            {
                MessageBox.Show("You need to see ChangeLog first!", "SVN Notifier", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return;
            }

            UpdateButton.Enabled = UpdateMenuItem.Enabled = CheckNowMenuItem.Enabled = false;
            folder.Status        = SvnStatus.Unknown;
            newNonUpdatedFolders.Clear();
            StatusLabel.Text = "Updating '" + folder.Path + "'...";
            UpdateTray(true);
            Refresh();                          // Show "Unknown" folder status during updating

            updateNotInProgress.Reset();
            BeginUpdateFolderStatuses();

            SvnTools.Update(folder, false);

            forcedFolders.Enqueue(folder);

            updateNotInProgress.Set();
        }
Beispiel #2
0
 public PropertiesForm(SvnItem folder)
 {
     InitializeComponent();
     _Folder          = folder;
     PathTextBox.Text = folder.Path;
     if (folder.ActiveStatusUpdateInterval < 0)
     {
         ActiveHoursUpDown.Value      = Config.DefaultActiveStatusUpdateInterval / 3600;
         ActiveMinutesUpDown.Value    = (Config.DefaultActiveStatusUpdateInterval % 3600) / 60;
         ActiveSecondsUpDown.Value    = Config.DefaultActiveStatusUpdateInterval % 60;
         InactiveHoursUpDown.Value    = Config.DefaultIdleStatusUpdateInterval / 3600;
         InactiveMinutesUpDown.Value  = (Config.DefaultIdleStatusUpdateInterval % 3600) / 60;
         InactiveSecondsUpDown.Value  = Config.DefaultIdleStatusUpdateInterval % 60;
         StatusUpdateCheckBox.Checked = false;
     }
     else
     {
         ActiveHoursUpDown.Value      = folder.ActiveStatusUpdateInterval / 3600;
         ActiveMinutesUpDown.Value    = (folder.ActiveStatusUpdateInterval % 3600) / 60;
         ActiveSecondsUpDown.Value    = folder.ActiveStatusUpdateInterval % 60;
         InactiveHoursUpDown.Value    = folder.IdleStatusUpdateInterval / 3600;
         InactiveMinutesUpDown.Value  = (folder.IdleStatusUpdateInterval % 3600) / 60;
         InactiveSecondsUpDown.Value  = folder.IdleStatusUpdateInterval % 60;
         StatusUpdateCheckBox.Checked = true;
     }
     EnableCheckBox.Checked       = folder.Enabled;
     StatusUpdateCheckBox.Enabled = EnableCheckBox.Checked;
 }
Beispiel #3
0
 public SvnFolderProcess(SvnItem f, Process p, bool isUpdateCommand)
 {
     folder               = f;
     process              = p;
     updateError          = false;
     this.isUpdateCommand = isUpdateCommand;
 }
Beispiel #4
0
        public static void Commit(SvnItem folder)
        {
            string        arguments = String.Format(tortoiseCommitArguments, folder.Path);
            ExecuteResult er        = ExecuteProcess(Config.TortoiseSVNpath, null, arguments, false, false);

            svnFolderProcesses.Add(new SvnFolderProcess(folder, er.process, false));
        }
Beispiel #5
0
        /// <summary>
        /// This method waits until updating will finish
        /// </summary>
        public static void Update(SvnItem folder, bool updateAll)
        {
            string revision  = Config.ChangeLogBeforeUpdate && !updateAll ? " /rev:" + folder.reviewedRevision : "";
            string arguments = String.Format(tortoiseUpdateArguments, folder.Path, revision, Config.UpdateWindowAction);

            ExecuteProcess(Config.TortoiseSVNpath, null, arguments, true, false);
        }
Beispiel #6
0
        public static void OpenChangeLogWindow(SvnItem folder, bool updateRevisions)
        {
            if (updateRevisions)
            {
                folder.reviewedRevision = GetRepositoryHeadRevision(folder);
                folder.updateRevision   = GetRepositoryCommitedRevision(folder);
            }
            string arguments = String.Format(tortoiseChangeLogArguments, folder.Path, folder.updateRevision);

            ExecuteProcess(Config.TortoiseSVNpath, null, arguments, false, false);
        }
Beispiel #7
0
        public static SvnItem Deserialize(string s)
        {
            string[] p = s.Split('|');
            SvnItem  f = new SvnItem(p[0], (PathType)int.Parse(p[4]))
            {
                ActiveStatusUpdateInterval = int.Parse(p[1]),
                IdleStatusUpdateInterval   = int.Parse(p[2]),
                Enabled = !Boolean.Parse(p[3])
            };

            return(f);
        }
Beispiel #8
0
        public static BindingList <SvnItem> ReadSvnFolders()
        {
            var folders = new BindingList <SvnItem>();

            for (int i = 1; ; i++)
            {
                string s = iniFile.ReadString("Folders", "Folder" + i);
                if (s.Length == 0)
                {
                    break;
                }
                folders.Add(SvnItem.Deserialize(s));
            }
            return(folders);
        }
Beispiel #9
0
        // TODO: Optimize speed; join GetRepositoryHeadRevision and GetRepositoryCommitedRevision functions into one:
        // void int GetRepositoryRevisions (string path, out int headRevision, out int committedRevision)
        private static int GetRepositoryRevision(SvnItem folder, string arg)
        {
            string        arguments = String.Format(svnInfoArguments, folder.Path, arg);
            ExecuteResult er        = ExecuteProcess(Config.SVNpath, folder.Path, arguments, true, false);

            try
            {
                SvnXml.Create(er.processOutput);
                SvnXml.ParseXmlForStatus();
                folder.RepositoryUrl = SvnXml.GetValue("url");
                return(Convert.ToInt32(SvnXml.GetValue("revision")));
            }
            catch
            {
                return(0);
            }
        }
Beispiel #10
0
        public static void BeginUpdateSilently(SvnItem folder)
        {
            // Skip this folder if update or commit is in progress
            foreach (SvnFolderProcess sp in svnFolderProcesses)
            {
                if (sp.folder.Path == folder.Path)
                {
                    return;
                }
            }

            folder.updateRevision = GetRepositoryCommitedRevision(folder);
            string        arguments = String.Format(svnUpdateArguments, folder.Path);
            ExecuteResult er        = ExecuteProcess(Config.SVNpath, null, arguments, false, false);

            Config.WriteLog("Svn", arguments);
            svnFolderProcesses.Add(new SvnFolderProcess(folder, er.process, true));
        }
Beispiel #11
0
 public static int GetRepositoryCommitedRevision(SvnItem folder)
 {
     return(GetRepositoryRevision(folder, "-r COMMITTED"));
 }
Beispiel #12
0
 public static int GetRepositoryHeadRevision(SvnItem folder)
 {
     return(GetRepositoryRevision(folder, "-r HEAD"));
 }
Beispiel #13
0
        public static SvnStatus GetSvnFolderStatus(SvnItem folder)
        {
            string path = folder.Path;

            if (!Directory.Exists(path) && !File.Exists(path))
            {
                ErrorAdded(path, "File or folder don't exist!");
                return(SvnStatus.Error);
            }

            if (folder.RepositoryUrl == null)
            {
                GetRepositoryRevision(folder, null);                    // Fill folder.RepositoryUrl
            }
            try
            {
                string        arguments = String.Format(svnStatusArguments, path);
                ExecuteResult er        = ExecuteProcess(Config.SVNpath, path, arguments, true, true);

                SvnXml.Create(er.processOutput);                        // Because SVN may return non-valid XML in some cases?

                try
                {
                    //http://svn.collab.net/repos/svn/trunk/subversion/svn/status.c
                    //http://blog.wolfman.com/articles/category/svn

                    SvnXml.ParseXmlForStatus();

                    if (!SvnXml.ContainsKey("revision"))
                    {
                        ErrorAdded(path, "Folder not found in repository");
                        return(SvnStatus.Error);
                    }

                    if (SvnXml.ContainsKey("NeedUpdate"))
                    {
                        if (SvnXml.ContainsKey("Modified"))
                        {
                            return(SvnStatus.NeedUpdate_Modified);
                        }

                        return(SvnStatus.NeedUpdate);
                    }

                    if (SvnXml.ContainsKey("Modified"))
                    {
                        return(SvnStatus.UpToDate_Modified);
                    }

                    return(SvnStatus.UpToDate);
                }
                catch
                {
                    return(SvnStatus.Error);
                }
            }
            catch
            {
                return(SvnStatus.Unknown);
            }
        }