private RefUpdateResult UpdateImpl(RevWalk.RevWalk walk, StoreBase store)
{
if (isNameConflicting())
{
return(RefUpdateResult.LockFailure);
}
var @lock = new LockFile(_looseFile);
if ([email protected]())
{
return(RefUpdateResult.LockFailure);
}
try
{
OldObjectId = _db.IdOf(Name);
if (_expValue != null)
{
ObjectId o = OldObjectId ?? ObjectId.ZeroId;
if (!AnyObjectId.equals(_expValue, o))
{
return(RefUpdateResult.LockFailure);
}
}
if (OldObjectId == null)
{
return(store.Store(@lock, RefUpdateResult.New));
}
RevObject newObj = SafeParse(walk, _newValue);
RevObject oldObj = SafeParse(walk, OldObjectId);
if (newObj == oldObj)
{
return(store.Store(@lock, RefUpdateResult.NoChange));
}
RevCommit newCom = (newObj as RevCommit);
RevCommit oldCom = (oldObj as RevCommit);
if (newCom != null && oldCom != null)
{
if (walk.isMergedInto(oldCom, newCom))
{
return(store.Store(@lock, RefUpdateResult.FastForward));
}
}
if (IsForceUpdate)
{
return(store.Store(@lock, RefUpdateResult.Forced));
}
return(RefUpdateResult.Rejected);
}
finally
{
@lock.Unlock();
}
}