Exemple #1
0
        private RefUpdateResult UpdateImpl(RevWalk.RevWalk walk, StoreBase store)
        {
            if (isNameConflicting())
            {
                return RefUpdateResult.LockFailure;
            }

            using (LockFile @lock = new LockFile(_looseFile))
            {
                if ([email protected]())
                {
                    return RefUpdateResult.LockFailure;
                }

                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;
            }
        }
        private RefUpdateResult updateImpl(RevWalk.RevWalk walk, Store store)
        {
            RevObject newObj;
            RevObject oldObj;

            if (getRefDatabase().isNameConflicting(Name))
                return RefUpdateResult.LOCK_FAILURE;
            try
            {
                if (!tryLock(true))
                    return RefUpdateResult.LOCK_FAILURE;
                if (expValue != null)
                {
                    ObjectId o;
                    o = oldValue != null ? oldValue : ObjectId.ZeroId;
                    if (!AnyObjectId.equals(expValue, o))
                        return RefUpdateResult.LOCK_FAILURE;
                }
                if (oldValue == null)
                    return store.execute(RefUpdateResult.NEW);

                newObj = safeParse(walk, newValue);
                oldObj = safeParse(walk, oldValue);
                if (newObj == oldObj)
                    return store.execute(RefUpdateResult.NO_CHANGE);

                if (newObj is RevCommit && oldObj is RevCommit)
                {
                    if (walk.isMergedInto((RevCommit)oldObj, (RevCommit)newObj))
                        return store.execute(RefUpdateResult.FAST_FORWARD);
                }

                if (IsForceUpdate)
                    return store.execute(RefUpdateResult.FORCED);
                return RefUpdateResult.REJECTED;
            }
            finally
            {
                unlock();
            }
        }
Exemple #3
0
        private RefUpdateResult updateImpl(RevWalk.RevWalk walk, StoreBase store)
        {
            LockFile @lock;
            RevObject newObj;
            RevObject oldObj;

            @lock = new LockFile(looseFile);
            if ([email protected]())
                return RefUpdateResult.LockFailure;
            try
            {
                OldObjectId = db.IdOf(Name);
                if (expValue != null)
                {
                    ObjectId o;
                    o = OldObjectId != null ? OldObjectId : ObjectId.ZeroId;
                    if (!expValue.Equals(o))
                        return RefUpdateResult.LockFailure;
                }
                if (OldObjectId == null)
                    return store.Store(@lock, RefUpdateResult.New);

                newObj = safeParse(walk, newValue);
                oldObj = safeParse(walk, OldObjectId);
                if (newObj == oldObj)
                    return store.Store(@lock, RefUpdateResult.NoChange);

                if (newObj is RevCommit && oldObj is RevCommit)
                {
                    if (walk.isMergedInto((RevCommit)oldObj, (RevCommit)newObj))
                        return store.Store(@lock, RefUpdateResult.FastForward);
                }

                if (IsForceUpdate)
                    return store.Store(@lock, RefUpdateResult.Forced);
                return RefUpdateResult.Rejected;
            }
            finally
            {
                @lock.Unlock();
            }
        }
Exemple #4
0
        private RefUpdateResult UpdateImpl(RevWalk.RevWalk walk, StoreBase store)
        {
            int lastSlash = Name.LastIndexOf('/');
            if (lastSlash > 0)
            {
                if (Repository.getAllRefs().ContainsKey(Name.Slice(0, lastSlash)))
                {
                    return RefUpdateResult.LockFailure;
                }
            }

            string rName = Name + "/";
            foreach (Ref r in Repository.getAllRefs().Values)
            {
                if (r.Name.StartsWith(rName))
                {
                    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 (!_expValue.Equals(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);
                }

                if (newObj is RevCommit && oldObj is RevCommit)
                {
                    if (walk.isMergedInto((RevCommit)oldObj, (RevCommit)newObj))
                    {
                        return store.Store(@lock, RefUpdateResult.FastForward);
                    }
                }

                if (IsForceUpdate)
                {
                    return store.Store(@lock, RefUpdateResult.Forced);
                }

                return RefUpdateResult.Rejected;
            }
            finally
            {
                @lock.Unlock();
            }
        }