/// <summary> /// Delete the ref. /// </summary> /// <param name="walk"> /// a RevWalk instance this delete command can borrow to perform /// the merge test. The walk will be reset to perform the test. /// </param> /// <returns>the result status of the delete.</returns> public RefUpdateResult delete(RevWalk.RevWalk walk) { string myName = Ref.getLeaf().getName(); if (myName.StartsWith(Constants.R_HEADS)) { Ref head = getRefDatabase().getRef(Constants.HEAD); while (head.isSymbolic()) { head = head.getTarget(); if (myName.Equals(head.getName())) { return(result = RefUpdateResult.REJECTED_CURRENT_BRANCH); } } } try { return(result = updateImpl(walk, new DeleteStore(this))); } catch (IOException) { result = RefUpdateResult.IO_FAILURE; throw; } }
protected override RefUpdateResult doDelete(RefUpdateResult status) { if (Ref.getLeaf().getStorage() != Storage.New) { _database.delete(this); } return(status); }
public override Ref peel(Ref @ref) { Ref leaf = @ref.getLeaf(); if (leaf.isPeeled() || leaf.getObjectId() == null) { return(@ref); } RevWalk.RevWalk rw = new RevWalk.RevWalk(getRepository()); RevObject obj = rw.parseAny(leaf.getObjectId()); ObjectIdRef newLeaf; if (obj is RevTag) { do { obj = rw.parseAny(((RevTag)obj).getObject()); } while (obj is RevTag); newLeaf = new PeeledTag(leaf.getStorage(), leaf .getName(), leaf.getObjectId(), obj.Copy()); } else { newLeaf = new PeeledNonTag(leaf.getStorage(), leaf .getName(), leaf.getObjectId()); } // Try to remember this peeling in the cache, so we don't have to do // it again in the future, but only if the reference is unchanged. if (leaf.getStorage().IsLoose) { RefList <LooseRef> curList = looseRefs.get(); int idx = curList.find(leaf.getName()); if (0 <= idx && curList.get(idx) == leaf) { LooseRef asPeeled = ((LooseRef)leaf).peel(newLeaf); RefList <LooseRef> newList = curList.set(idx, asPeeled); looseRefs.compareAndSet(curList, newList); } } return(recreate(@ref, newLeaf)); }
protected override bool tryLock(bool deref) { Ref dst = Ref; if (deref) { dst = dst.getLeaf(); } string name = dst.getName(); _lock = new LockFile(_database.fileFor(name)); if (_lock.Lock()) { dst = _database.getRef(name); OldObjectId = (dst != null ? dst.getObjectId() : null); return(true); } else { return(false); } }
public void log(RefUpdate update, string msg, bool deref) { ObjectId oldId = update.getOldObjectId(); ObjectId newId = update.getNewObjectId(); Ref @ref = update.getRef(); PersonIdent ident = update.getRefLogIdent(); if (ident == null) { ident = new PersonIdent(parent); } else { ident = new PersonIdent(ident); } var r = new StringBuilder(); r.Append(ObjectId.ToString(oldId)); r.Append(' '); r.Append(ObjectId.ToString(newId)); r.Append(' '); r.Append(ident.ToExternalString()); r.Append('\t'); r.Append(msg); r.Append('\n'); byte[] rec = Constants.encode(r.ToString()); if (deref && @ref.isSymbolic()) { log(@ref.getName(), rec); log(@ref.getLeaf().getName(), rec); } else { log(@ref.getName(), rec); } }