コード例 #1
0
ファイル: DiffVersions.cs プロジェクト: eatplayhate/versionr
        protected override bool RunInternal(object options)
        {
            DiffVersionsVerbOptions localOptions = options as DiffVersionsVerbOptions;

            Printer.EnableDiagnostics = localOptions.Verbose;

            Objects.Version baseVersion    = null;
            Objects.Version compareVersion = null;

            if (localOptions.Versions.Count == 0)
            {
                Printer.PrintError("Must specify a version or branch to compare to");
                return(false);
            }
            else if (localOptions.Versions.Count == 1)
            {
                if (Workspace.HasStagedModifications)
                {
                    Printer.PrintError("Cannot compare current workspace while there are staged modifications");
                    return(false);
                }

                baseVersion    = Workspace.Version;
                compareVersion = GetVersionByName(localOptions.Versions[0]);
            }
            else if (localOptions.Versions.Count == 2)
            {
                baseVersion    = GetVersionByName(localOptions.Versions[0]);
                compareVersion = GetVersionByName(localOptions.Versions[1]);
            }
            else
            {
                Printer.PrintError("Too many versions specified");
                return(false);
            }

            if (baseVersion == null || compareVersion == null)
            {
                return(false);
            }

            CompareVersions(baseVersion, compareVersion, localOptions);

            return(true);
        }
コード例 #2
0
ファイル: DiffVersions.cs プロジェクト: eatplayhate/versionr
        public void CompareVersions(Objects.Version baseVersion, Objects.Version compareVersion, DiffVersionsVerbOptions localOptions)
        {
            var baseRecords    = Workspace.GetRecords(baseVersion);
            var compareRecords = Workspace.GetRecords(compareVersion);

            // List additions
            var added = new HashSet <Objects.Record>(compareRecords, RecordPathComparer.Instance);

            added.ExceptWith(baseRecords);
            Report("Add", added.ToList());

            // List deletions
            var deleted = new HashSet <Objects.Record>(baseRecords, RecordPathComparer.Instance);

            deleted.ExceptWith(compareRecords);
            Report("Delete", deleted.ToList());

            // Check for modifications
            var compareLookup = new Dictionary <string, Objects.Record>();

            foreach (var record in compareRecords)
            {
                compareLookup[record.CanonicalName] = record;
            }
            var modified = new List <Objects.Record>();

            foreach (var baseRecord in baseRecords)
            {
                Objects.Record compareRecord;
                if (!compareLookup.TryGetValue(baseRecord.CanonicalName, out compareRecord))
                {
                    continue;
                }

                if (compareRecord.Fingerprint != baseRecord.Fingerprint)
                {
                    modified.Add(compareRecord);
                }
            }
            Report("Modify", modified);
        }