Пример #1
0
        private void RewriteReference(DirectReference oldRef, ObjectId newTarget, string backupNamePrefix, Queue <Action> rollbackActions)
        {
            string newRefName = oldRef.CanonicalName;

            if (oldRef.IsTag() && tagNameRewriter != null)
            {
                newRefName = Reference.TagPrefix +
                             tagNameRewriter(oldRef.CanonicalName.Substring(Reference.TagPrefix.Length), false, oldRef.Target);
            }

            if (oldRef.Target.Id == newTarget && oldRef.CanonicalName == newRefName)
            {
                // The reference isn't rewritten
                return;
            }

            string backupName = backupNamePrefix + oldRef.CanonicalName.Substring("refs/".Length);

            if (repo.Refs.Resolve <Reference>(backupName) != null)
            {
                throw new InvalidOperationException(
                          String.Format("Can't back up reference '{0}' - '{1}' already exists", oldRef.CanonicalName, backupName));
            }

            repo.Refs.Add(backupName, oldRef.TargetIdentifier, false, "filter-branch: backup");
            rollbackActions.Enqueue(() => repo.Refs.Remove(backupName));

            Reference newRef = repo.Refs.UpdateTarget(oldRef, newTarget, "filter-branch: rewrite");

            rollbackActions.Enqueue(() => repo.Refs.UpdateTarget(oldRef, oldRef.Target.Id, "filter-branch: abort"));

            if (newRef.CanonicalName == newRefName)
            {
                return;
            }

            repo.Refs.Move(newRef, newRefName);
            rollbackActions.Enqueue(() => repo.Refs.Move(newRef, oldRef.CanonicalName));
        }
Пример #2
0
        private void RewriteReference(DirectReference oldRef, ObjectId newTarget, string backupNamePrefix, Queue<Action> rollbackActions)
        {
            string newRefName = oldRef.CanonicalName;
            if (oldRef.IsTag() && tagNameRewriter != null)
            {
                newRefName = Reference.TagPrefix +
                             tagNameRewriter(oldRef.CanonicalName.Substring(Reference.TagPrefix.Length), false, oldRef.Target);
            }

            if (oldRef.Target.Id == newTarget && oldRef.CanonicalName == newRefName)
            {
                // The reference isn't rewritten
                return;
            }

            string backupName = backupNamePrefix + oldRef.CanonicalName.Substring("refs/".Length);

            if (repo.Refs.Resolve<Reference>(backupName) != null)
            {
                throw new InvalidOperationException(
                    String.Format("Can't back up reference '{0}' - '{1}' already exists", oldRef.CanonicalName, backupName));
            }

            repo.Refs.Add(backupName, oldRef.TargetIdentifier, false, "filter-branch: backup");
            rollbackActions.Enqueue(() => repo.Refs.Remove(backupName));

            Reference newRef = repo.Refs.UpdateTarget(oldRef, newTarget, "filter-branch: rewrite");
            rollbackActions.Enqueue(() => repo.Refs.UpdateTarget(oldRef, oldRef.Target.Id, "filter-branch: abort"));

            if (newRef.CanonicalName == newRefName)
            {
                return;
            }

            repo.Refs.Move(newRef, newRefName);
            rollbackActions.Enqueue(() => repo.Refs.Move(newRef, oldRef.CanonicalName));
        }