コード例 #1
0
        }        // GetFileStatus

        /// <summary>
        /// Create a VersionInfo from a LocalStatus
        /// </summary>
        private VersionInfo CreateNode(LocalStatus status, Repository repo)
        {
            VersionStatus rs = VersionStatus.Unversioned;
            Revision      rr = null;

            VersionStatus vstatus = ConvertStatus(status.Status);
            // System.Console.WriteLine ("Converted {0} to {1} for {2}", status.Status, vstatus, status.Filename);

            VersionInfo ret = new VersionInfo(status.Filename, Path.GetFullPath(status.Filename), Directory.Exists(status.Filename),
                                              vstatus, new BazaarRevision(repo, status.Revision),
                                              rs, rr);

            return(ret);
        }        // CreateNode
コード例 #2
0
        /// <summary>
        /// Create a VersionInfo from a LocalStatus
        /// </summary>
        private VersionInfo CreateNode(LocalStatus status, Repository repo)
        {
            VersionStatus rs = VersionStatus.Unversioned;
            Revision rr = null;

            VersionStatus vstatus = ConvertStatus (status.Status);
            // System.Console.WriteLine ("Converted {0} to {1} for {2}", status.Status, vstatus, status.Filename);

            VersionInfo ret = new VersionInfo (status.Filename, Path.GetFullPath (status.Filename), Directory.Exists (status.Filename),
                vstatus, new BazaarRevision (repo, status.Revision),
                rs, rr);
            return ret;
        }
コード例 #3
0
        public override System.Collections.Generic.IList<LocalStatus> Status(string path, BazaarRevision revision)
        {
            StringBuilder command = new StringBuilder();
            List<LocalStatus> statuses = new List<LocalStatus>();
            LocalStatus mystatus = null;
            string rev = string.Empty;
            bool modified = false;
            IntPtr tuple = IntPtr.Zero,
            listlen = IntPtr.Zero;

            path = NormalizePath(Path.GetFullPath(path).Replace("{", "{{").Replace("}", "}}"));// escape for string.format
            command.AppendFormat("tree,relpath = workingtree.WorkingTree.open_containing(path=ur\"{0}\")\n", path);

            if (null == revision || BazaarRevision.HEAD == revision.Rev || BazaarRevision.NONE == revision.Rev)
            {
                command.AppendFormat("rev = tree.basis_tree()\n");
                command.AppendFormat("totree = tree\n");
                rev = BazaarRevision.HEAD;
            }
            else
            {
                command.AppendFormat("revspec = revisionspec.RevisionSpec.from_string(spec=\"{0}\")\n", ((BazaarRevision)revision.GetPrevious()).Rev);
                command.AppendFormat("rev = tree.branch.repository.revision_tree(revision_id=revspec.in_history(branch=tree.branch).rev_id)\n");
                command.AppendFormat("revspec = revisionspec.RevisionSpec.from_string(spec=\"{0}\")\n", revision.Rev);
                command.AppendFormat("totree = tree.branch.repository.revision_tree(revision_id=revspec.in_history(branch=tree.branch).rev_id)\n");
                rev = revision.Rev;
            }
            command.AppendFormat("status = totree.changes_from(other=rev, specific_files=[relpath])\n");

            lock (lockme)
            {
                run(null, command.ToString());

                string[] types = new string[]{ "added", "removed", "modified", "unversioned" };
                string filename;

                foreach (string modtype in types)
                {
                    try
                    {
                        listlen = run(new List<string>{ "mylen" },
                            "mylist = status.{0}\nmylen = len(mylist)\n", modtype)[0];
                        int listlength = PyInt_AsLong(listlen);
                        for (int i = 0; i < listlength; ++i)
                        {
                            tuple = run(new List<string>{ "astatus" }, "astatus = tree.abspath(filename=mylist[{0}][0])", i)[0];
                            filename = StringFromPython(tuple);
                            if (Platform.IsWindows)
                            {
                                filename = filename.Replace("/", "\\");
                            }
                            LocalStatus status = new LocalStatus(rev, filename, longStatuses[modtype]);
                            if (path.Equals(filename, StringComparison.Ordinal))
                            {
                                mystatus = status;
                            }
                            if (filename.StartsWith(path, StringComparison.Ordinal))
                            {
                                modified = (!"unversioned".Equals(modtype, StringComparison.Ordinal));
                                statuses.Add(status);
                            }
                        }// get each file status
                    }
                    finally
                    {
                        Py_DecRef(listlen);
                    }
                }

                command = new StringBuilder();
                command.Append("myconflicts = \"\"\n");
                command.Append("for conflict in totree.conflicts():\n");
                command.Append("  myconflicts = myconflicts + totree.abspath (filename=conflict.path) + \"|\"\n");

                string conflicts = StringFromPython(run(new List<string>{ "myconflicts" }, command.ToString())[0]);

                foreach (string conflict in conflicts.Split ('|'))
                {
                    if (!string.IsNullOrEmpty(conflict))
                    {
                        bool matched = false;
                        if (path.Equals(conflict, StringComparison.Ordinal))
                        {
                            if (null == mystatus)
                            {
                                statuses.Insert(0, mystatus = new LocalStatus(rev, path, ItemStatus.Conflicted));
                            }
                            else
                            {
                                mystatus.Status = ItemStatus.Conflicted;
                            }
                        }
                        else if (Path.GetFullPath(conflict).StartsWith(path, StringComparison.Ordinal))
                        {
                            foreach (LocalStatus status in statuses)
                            {
                                if (conflict.EndsWith(status.Filename, StringComparison.Ordinal))
                                {
                                    status.Status = ItemStatus.Conflicted;
                                    matched = true;
                                    break;
                                }
                            }// Check existing statuses
                            if (!matched)
                            {
                                statuses.Add(new LocalStatus(rev, conflict, ItemStatus.Conflicted));
                            }// Add new status if not found
                        }// Child file is conflicted
                    }// If conflict is valid path
                }// Check each conflict
            }// lock

            if (null == mystatus)
            {
                statuses.Insert(0, new LocalStatus("-1", path, modified ? ItemStatus.Modified : ItemStatus.Unchanged));
            }// path isn't in modified list

            return statuses;
        }