public RefRename(RefUpdate toUpdate, RefUpdate fromUpdate) { _renameResult = RefResult.NotAttempted; _newToUpdate = toUpdate; _oldFromDelete = fromUpdate; }
/// <summary> /// The result of the new ref update /// </summary> /// <returns></returns> /// <exception cref="IOException"></exception> public RefResult Rename() { Ref oldRef = _oldFromDelete.Repository.getRef(Constants.HEAD); bool renameHeadToo = oldRef != null && oldRef.Name == _oldFromDelete.Name; Repository db = _oldFromDelete.Repository; RefLogWriter.renameTo(db, _oldFromDelete, _newToUpdate); _newToUpdate.SetRefLogMessage(null, false); string tmpRefName = "RENAMED-REF.." + Thread.CurrentThread.ManagedThreadId; RefUpdate tmpUpdateRef = db.UpdateRef(tmpRefName); if (renameHeadToo) { try { _oldFromDelete.Repository.Link(Constants.HEAD, tmpRefName); } catch (IOException) { RefLogWriter.renameTo(db, _newToUpdate, _oldFromDelete); return _renameResult = RefResult.LockFailure; } } tmpUpdateRef.NewObjectId = _oldFromDelete.OldObjectId; tmpUpdateRef.IsForceUpdate = true; RefResult update = tmpUpdateRef.Update(); if (update != RefResult.Forced && update != RefResult.New && update != RefResult.NoChange) { RefLogWriter.renameTo(db, _newToUpdate, _oldFromDelete); if (renameHeadToo) { _oldFromDelete.Repository.Link(Constants.HEAD, _oldFromDelete.Name); } return _renameResult = update; } _oldFromDelete.ExpectedOldObjectId = _oldFromDelete.OldObjectId; _oldFromDelete.IsForceUpdate = true; RefResult delete = _oldFromDelete.Delete(); if (delete != RefResult.Forced) { if (db.getRef(_oldFromDelete.Name) != null) { RefLogWriter.renameTo(db, _newToUpdate, _oldFromDelete); if (renameHeadToo) { _oldFromDelete.Repository.Link(Constants.HEAD, _oldFromDelete.Name); } } return _renameResult = delete; } _newToUpdate.NewObjectId = tmpUpdateRef.NewObjectId; RefResult updateResult = _newToUpdate.Update(); if (updateResult != RefResult.New) { RefLogWriter.renameTo(db, _newToUpdate, _oldFromDelete); if (renameHeadToo) { _oldFromDelete.Repository.Link(Constants.HEAD, _oldFromDelete.Name); } _oldFromDelete.ExpectedOldObjectId = null; _oldFromDelete.NewObjectId = _oldFromDelete.OldObjectId; _oldFromDelete.IsForceUpdate = true; _oldFromDelete.SetRefLogMessage(null, false); RefResult undelete = _oldFromDelete.Update(); if (undelete != RefResult.New && undelete != RefResult.LockFailure) { return _renameResult = RefResult.IOFailure; } return _renameResult = RefResult.LockFailure; } if (renameHeadToo) { _oldFromDelete.Repository.Link(Constants.HEAD, _newToUpdate.Name); } else { db.OnRefsChanged(); } RefLogWriter.append(this, _newToUpdate.Name, "Branch: renamed " + Repository.ShortenRefName(_oldFromDelete.Name) + " to " + Repository.ShortenRefName(_newToUpdate.Name)); if (renameHeadToo) { RefLogWriter.append(this, Constants.HEAD, "Branch: renamed " + Repository.ShortenRefName(_oldFromDelete.Name) + " to " + Repository.ShortenRefName(_newToUpdate.Name)); } return _renameResult = RefResult.Renamed; }