예제 #1
0
        public override bool RequestFileWritePermission(FilePath path)
        {
            if (!File.Exists(path))
            {
                return(true);
            }
            if ((File.GetAttributes(path) & FileAttributes.ReadOnly) == 0)
            {
                return(true);
            }
            AlertButton but = new AlertButton("Lock File");

            if (!MessageService.Confirm(GettextCatalog.GetString("File locking required"), GettextCatalog.GetString("The file '{0}' must be locked before editing.", path), but))
            {
                return(false);
            }
            try {
                Svn.Lock(null, "", false, path);
            } catch (SubversionException ex) {
                MessageService.ShowError(GettextCatalog.GetString("The file '{0}' could not be unlocked", path), ex.Message);
                return(false);
            }
            VersionControlService.NotifyFileStatusChanged(new FileUpdateEventArgs(this, path, false));
            return(true);
        }
 public void Resolve(FilePath[] localPaths, bool recurse, IProgressMonitor monitor)
 {
     Svn.Resolve(localPaths, recurse, monitor);
     foreach (string path in localPaths)
     {
         VersionControlService.NotifyFileStatusChanged(this, path, Directory.Exists(path));
     }
 }
예제 #3
0
        public void Resolve(FilePath[] localPaths, bool recurse, IProgressMonitor monitor)
        {
            Svn.Resolve(localPaths, recurse, monitor);
            FileUpdateEventArgs args = new FileUpdateEventArgs();

            foreach (var path in localPaths)
            {
                args.Add(new FileUpdateEventInfo(this, path, Directory.Exists(path)));
            }
            VersionControlService.NotifyFileStatusChanged(args);
        }
예제 #4
0
            protected override void Finished()
            {
                dlg.EndCommit(success);
                dlg.Destroy();
                FileUpdateEventArgs args = new FileUpdateEventArgs();

                foreach (ChangeSetItem it in changeSet.Items)
                {
                    args.Add(new FileUpdateEventInfo(vc, it.LocalPath, it.IsDirectory));
                }

                if (args.Count > 0)
                {
                    VersionControlService.NotifyFileStatusChanged(args);
                }

                VersionControlService.NotifyAfterCommit(vc, changeSet, success);
            }
예제 #5
0
        public override bool RequestFileWritePermission(params FilePath [] paths)
        {
            var toLock = new List <FilePath>();

            foreach (var path in paths)
            {
                if (!File.Exists(path))
                {
                    continue;
                }
                if (!TryGetVersionInfo(path, out var info))
                {
                    continue;
                }
                if (!info.IsVersioned || !Svn.HasNeedLock(path) || (File.GetAttributes(path) & FileAttributes.ReadOnly) == 0)
                {
                    continue;
                }
                toLock.Add(path);
            }

            if (toLock.Count == 0)
            {
                return(true);
            }

            AlertButton but = new AlertButton(GettextCatalog.GetString("Lock File"));

            if (!MessageService.Confirm(GettextCatalog.GetString("The following files must be locked before editing."),
                                        String.Join("\n", toLock.Select(u => u.ToString())), but))
            {
                return(false);
            }

            try {
                Svn.Lock(null, "", false, toLock.ToArray());
            } catch (SubversionException ex) {
                MessageService.ShowError(GettextCatalog.GetString("File could not be unlocked."), ex.Message);
                return(false);
            }

            VersionControlService.NotifyFileStatusChanged(new FileUpdateEventArgs(this, toLock.ToArray()));
            return(true);
        }
예제 #6
0
        public override void Add(FilePath[] paths, bool recurse, IProgressMonitor monitor)
        {
            foreach (FilePath path in paths)
            {
                if (IsVersioned(path) && File.Exists(path) && !Directory.Exists(path))
                {
                    if (rootPath == null)
                    {
                        throw new UserException(GettextCatalog.GetString("Project publishing failed. There is a stale .svn folder in the path '{0}'", path.ParentDirectory));
                    }
                    VersionInfo srcInfo = GetVersionInfo(path, false);
                    if (srcInfo.HasLocalChange(VersionStatus.ScheduledDelete))
                    {
                        // It is a file that was deleted. It can be restored now since it's going
                        // to be added again.
                        // First of all, make a copy of the file
                        string tmp = Path.GetTempFileName();
                        File.Copy(path, tmp, true);

                        // Now revert the status of the file
                        Revert(path, false, monitor);

                        // Copy the file over the old one and clean up
                        File.Copy(tmp, path, true);
                        File.Delete(tmp);
                    }
                }
                else
                {
                    if (File.Exists(path) && !IsVersioned(path.ParentDirectory))
                    {
                        // The file belongs to an unversioned folder. We can add it by versioning the parent
                        // folders up to the root of the repository

                        if (!path.IsChildPathOf(rootPath))
                        {
                            throw new InvalidOperationException("File outside the repository directory");
                        }

                        List <FilePath> dirChain  = new List <FilePath> ();
                        FilePath        parentDir = path.CanonicalPath;
                        do
                        {
                            parentDir = parentDir.ParentDirectory;
                            if (Directory.Exists(SubversionVersionControl.GetDirectoryDotSvn(parentDir)))
                            {
                                break;
                            }
                            dirChain.Add(parentDir);
                        }while (parentDir != rootPath);

                        // Found all parent unversioned dirs. Versin them now.
                        dirChain.Reverse();
                        FileUpdateEventArgs args = new FileUpdateEventArgs();
                        foreach (var d in dirChain)
                        {
                            Svn.Add(d, false, monitor);
                            args.Add(new FileUpdateEventInfo(this, dirChain [0], true));
                        }
                        VersionControlService.NotifyFileStatusChanged(args);
                    }
                    Svn.Add(path, recurse, monitor);
                }
            }
        }
예제 #7
0
        protected override async Task OnAddAsync(FilePath[] localPaths, bool recurse, ProgressMonitor monitor)
        {
            foreach (FilePath path in localPaths)
            {
                if (await IsVersionedAsync(path, monitor.CancellationToken).ConfigureAwait(false) && File.Exists(path) && !Directory.Exists(path))
                {
                    if (RootPath.IsNull)
                    {
                        throw new UserException(GettextCatalog.GetString("Project publishing failed. There is a stale .svn folder in the path '{0}'", path.ParentDirectory));
                    }
                    VersionInfo srcInfo = await GetVersionInfoAsync(path, VersionInfoQueryFlags.IgnoreCache).ConfigureAwait(false);

                    if (srcInfo.HasLocalChange(VersionStatus.ScheduledDelete))
                    {
                        // It is a file that was deleted. It can be restored now since it's going
                        // to be added again.
                        // First of all, make a copy of the file
                        string tmp = Path.GetTempFileName();
                        File.Copy(path, tmp, true);

                        // Now revert the status of the file
                        await RevertAsync(path, false, monitor).ConfigureAwait(false);

                        // Copy the file over the old one and clean up
                        File.Copy(tmp, path, true);
                        File.Delete(tmp);
                        continue;
                    }
                }
                else
                {
                    if (!await IsVersionedAsync(path.ParentDirectory, monitor.CancellationToken).ConfigureAwait(false))
                    {
                        // The file/folder belongs to an unversioned folder. We can add it by versioning the parent
                        // folders up to the root of the repository

                        if (!path.IsChildPathOf(RootPath))
                        {
                            throw new InvalidOperationException("File outside the repository directory");
                        }

                        List <FilePath> dirChain  = new List <FilePath> ();
                        FilePath        parentDir = path.CanonicalPath;
                        do
                        {
                            parentDir = parentDir.ParentDirectory;
                            if (await IsVersionedAsync(parentDir, monitor.CancellationToken).ConfigureAwait(false))
                            {
                                break;
                            }
                            dirChain.Add(parentDir);
                        }while (parentDir != RootPath);

                        // Found all parent unversioned dirs. Versin them now.
                        dirChain.Reverse();
                        FileUpdateEventArgs args = new FileUpdateEventArgs();
                        foreach (var d in dirChain)
                        {
                            Svn.Add(d, false, monitor);
                            args.Add(new FileUpdateEventInfo(this, d, true));
                        }
                        VersionControlService.NotifyFileStatusChanged(args);
                    }
                }
                Svn.Add(path, recurse, monitor);
            }
        }