Beispiel #1
0
 public TreeDirectory(Repository repository, string relativePath, TreeDirectory parent, FileStatus status, string name)
     : base(repository, relativePath, parent, status, name)
 {
     _directories = new List<TreeDirectory>();
     _files = new List<TreeFile>();
     _commits = new List<TreeCommit>();
 }
Beispiel #2
0
        public static Note CreateNote(Repository repository, NoteData noteData)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(noteData, "noteData");

            return new Note(repository, noteData.Name, noteData.ObjectName, noteData.Message);
        }
Beispiel #3
0
			public static void IsValidGitObject(GitNamedObjectWithLifetime gitObject, Repository repository, string parameterName)
			{
				Assert.IsNotNull(repository);
				Assert.IsNeitherNullNorWhitespace(parameterName);

				if(gitObject == null)
				{
					throw new ArgumentNullException(parameterName);
				}
				if(gitObject.Repository != repository)
				{
					throw new ArgumentException(
						string.Format(
							CultureInfo.InvariantCulture,
							Resources.ExcSuppliedObjectIsNotHandledByThisRepository,
							gitObject.GetType().Name),
						parameterName);
				}
				if(gitObject.IsDeleted)
				{
					throw new ArgumentException(
						string.Format(
							CultureInfo.InvariantCulture,
							Resources.ExcSuppliedObjectIsDeleted,
							gitObject.GetType().Name),
						parameterName);
				}
			}
Beispiel #4
0
        internal StashedState(Repository repository, int index, Revision revision)
            : base(repository, index.ToString().SurroundWith(GitConstants.StashName + "@{", "}"))
        {
            Verify.Argument.IsNotNull(revision, "revision");
            Verify.Argument.IsNotNegative(index, "index");

            _revision = revision;
        }
Beispiel #5
0
        public RevisionLog(Repository repository, IList<Revision> revisions)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(revisions, "revisions");

            _repository = repository;
            _revisions  = revisions;
        }
Beispiel #6
0
 /// <summary>Create <see cref="User"/>.</summary>
 /// <param name="repository">Related repository.</param>
 /// <param name="name">User name.</param>
 /// <param name="email">User email.</param>
 /// <param name="commits">Commit count.</param>
 internal User(Repository repository, string name, string email, int commits)
     : base(repository, name + "\n" + email)
 {
     _name = name;
     _email = email;
     _commits = commits;
     _avatar = new Gravatar(email);
 }
Beispiel #7
0
        public DynamicRevisionPointer(Repository repository, string pointer)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNeitherNullNorWhitespace(pointer, "pointer");

            _repository = repository;
            _pointer = pointer;
        }
Beispiel #8
0
 internal Revision(Repository repository, Hash hash)
     : base(repository)
 {
     _parents    = new RevisionParentsCollection();
     _references = new RevisionReferencesCollection();
     _hash       = hash;
     _hashString = hash.ToString();
 }
Beispiel #9
0
        public IndexChangesDiffSource(Repository repository, bool cached, IList<string> paths)
        {
            Verify.Argument.IsNotNull(repository, "repository");

            _repository = repository;
            _cached = cached;
            _paths = paths;
            _repository.Status.Changed += OnStatusChanged;
        }
Beispiel #10
0
        public RevisionLog(Repository repository, IList<Revision> revisions, Dictionary<Revision, IList<Revision>> parents)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(revisions, "revisions");

            _repository = repository;
            _revisions  = revisions;
            _parents    = parents;
        }
        internal RemoteReferencesCollection(Remote remote)
        {
            Verify.Argument.IsNotNull(remote, "remote");

            _remote         = remote;
            _repository     = remote.Repository;
            _remoteBranches = new Dictionary<string, RemoteRepositoryBranch>();
            _remoteTags     = new Dictionary<string, RemoteRepositoryTag>();
            _syncRoot       = new object();
        }
Beispiel #12
0
 /// <summary>Create <see cref="Hook"/>.</summary>
 /// <param name="repository">Related <see cref="Repository"/>.</param>
 /// <param name="name">Hook name.</param>
 internal Hook(Repository repository, string name)
     : base(repository, name)
 {
     _relativePath = "hooks" + Path.DirectorySeparatorChar + name;
     _fullPath = Path.Combine(repository.GitDirectory, _relativePath);
     if(!File.Exists(_fullPath))
     {
         MarkAsDeleted();
     }
 }
Beispiel #13
0
        public static ConfigParameter CreateConfigParameter(Repository repository, ConfigParameterData configParameterData)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(configParameterData, "configParameterData");

            return new ConfigParameter(
                repository,
                configParameterData.ConfigFile,
                configParameterData.Name,
                configParameterData.Value);
        }
Beispiel #14
0
 public static void FetchOrPull(Repository repository, Remote remote, bool pull)
 {
     var affectedReferences = ReferenceType.RemoteBranch | ReferenceType.Tag;
     if(pull)
     {
         affectedReferences |= ReferenceType.LocalBranch;
     }
     ReferenceChange[] changes;
     var state1 = RefsState.Capture(repository, affectedReferences);
     using(repository.Monitor.BlockNotifications(
         RepositoryNotifications.BranchChanged,
         RepositoryNotifications.TagChanged))
     {
         try
         {
             if(pull)
             {
                 var p = new PullParameters();
                 if(remote != null)
                 {
                     p.Repository = remote.Name;
                 }
                 repository.Accessor.Pull.Invoke(p);
             }
             else
             {
                 var p = new FetchParameters();
                 if(remote != null)
                 {
                     p.Repository = remote.Name;
                 }
                 repository.Accessor.Fetch.Invoke(p);
             }
         }
         finally
         {
             repository.Refs.Refresh(affectedReferences);
             var state2 = RefsState.Capture(repository, affectedReferences);
             changes = RefsDiff.Calculate(state1, state2);
             if(changes != null && changes.Length != 0)
             {
                 repository.OnUpdated();
             }
         }
     }
     if(pull)
     {
         repository.Remotes.OnPullCompleted(remote, changes);
     }
     else
     {
         repository.Remotes.OnFetchCompleted(remote, changes);
     }
 }
Beispiel #15
0
        /// <summary>Create <see cref="RepositoryMonitor"/>.</summary>
        /// <param name="repository">Related <see cref="Repository"/>.</param>
        internal RepositoryMonitor(Repository repository)
        {
            Verify.Argument.IsNotNull(repository, "repository");

            _repository = repository;

            _blockedNotifications = new List<NotificationBlock>();
            _pendingNotifications = new Queue<IRepositoryChangedNotification>();
            _delayedNotifications = new Queue<IRepositoryChangedNotification>();
            _delayedUnblocks      = new Queue<NotificationDelayedUnblock>();
        }
Beispiel #16
0
 protected TreeItem(Repository repository, string relativePath,
     TreeDirectory parent, FileStatus status, string name)
     : base(repository, name)
 {
     _parent = parent;
     if(parent != null)
     {
         _stagedStatus = parent._stagedStatus;
     }
     _status = status;
     _relativePath = relativePath;
 }
Beispiel #17
0
        /// <summary>Initializes a new instance of the <see cref="ReflogRecord"/> class.</summary>
        /// <param name="repository">Host repository.</param>
        /// <param name="reflog">Owner reflog.</param>
        /// <param name="revision">Target revision.</param>
        /// <param name="message">Reflog record message.</param>
        /// <param name="index">Reflog record index.</param>
        internal ReflogRecord(Repository repository, Reflog reflog, Revision revision, string message, int index)
            : base(repository)
        {
            Verify.Argument.IsNotNull(reflog, "reflog");
            Verify.Argument.IsNotNull(revision, "revision");
            Verify.Argument.IsNotNull(message, "message");
            Verify.Argument.IsNotNegative(index, "index");

            _reflog = reflog;
            _revision = revision;
            _message = message;
            _index = index;
        }
Beispiel #18
0
        /// <summary>Create <see cref="Reference"/>.</summary>
        /// <param name="repository">Host <see cref="Repository"/>.</param>
        /// <param name="name">Reference name.</param>
        /// <param name="pointer">Referenced object.</param>
        internal Reference(Repository repository, string name, IRevisionPointer pointer)
            : base(repository, name)
        {
            Verify.Argument.IsNotNull(pointer, "pointer");

            _pointer = PrepareInputPointer(pointer);
            _reflogSync = new object();
            EnterPointer(_pointer);
            var rev = _pointer.Dereference();
            if(rev != null)
            {
                EnterRevision(_pointer.Dereference());
            }
        }
Beispiel #19
0
        public static Branch CreateBranch(Repository repository, BranchData branchData)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(branchData, "branchData");
            Verify.Argument.IsFalse(branchData.IsRemote, "branchData", "Cannot create remote branch.");

            Revision revision;
            lock(repository.Revisions.SyncRoot)
            {
                revision = repository.Revisions.GetOrCreateRevision(branchData.SHA1);
            }
            var branch = new Branch(repository, branchData.Name, revision);
            if(branchData.IsCurrent) repository.Head.Pointer = branch;
            return branch;
        }
Beispiel #20
0
        private RefsState(Repository repository, ReferenceType referenceTypes)
        {
            _states = new Dictionary<string, ReferenceState>();

            if((referenceTypes & ReferenceType.LocalBranch) == ReferenceType.LocalBranch)
            {
                CaptureHeads(repository);
            }
            if((referenceTypes & ReferenceType.RemoteBranch) == ReferenceType.RemoteBranch)
            {
                CaptureRemotes(repository);
            }
            if((referenceTypes & ReferenceType.Tag) == ReferenceType.Tag)
            {
                CaptureTags(repository);
            }
        }
Beispiel #21
0
        private Tree(Repository repository, string treeHash, bool load)
            : base(repository)
        {
            Verify.Argument.IsNeitherNullNorWhitespace(treeHash, "treeHash");

            _treeHash = treeHash;
            var strRoot = repository.WorkingDirectory;
            if(strRoot.EndsWith("\\"))
            {
                strRoot = strRoot.Substring(0, strRoot.Length - 1);
            }
            int i = strRoot.LastIndexOf('\\');
            string name = (i != -1) ? strRoot.Substring(i + 1) : strRoot;
            _root = new TreeDirectory(Repository, string.Empty, null, name);
            if(load)
            {
                Refresh();
            }
        }
Beispiel #22
0
 /// <summary>Create <see cref="Status"/> object.</summary>
 /// <param name="repository">Related repository.</param>
 internal Status(Repository repository)
     : base(repository)
 {
     _unstagedPlainList = new Dictionary<string, TreeFile>();
     _stagedPlainList = new Dictionary<string, TreeFile>();
     var strRoot = Repository.WorkingDirectory;
     if(strRoot.EndsWithOneOf(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar))
     {
         strRoot = strRoot.Substring(0, strRoot.Length - 1);
     }
     _unstagedRoot = new TreeDirectory(Repository, string.Empty, null, strRoot)
         {
             StagedStatus = StagedStatus.Unstaged
         };
     _stagedRoot = new TreeDirectory(Repository, string.Empty, null, strRoot)
         {
             StagedStatus = StagedStatus.Staged
         };
 }
Beispiel #23
0
 public TreeFile(Repository repository, string relativePath, TreeDirectory parent, FileStatus status, string name, long size)
     : base(repository, relativePath, parent, status, name)
 {
     _size = size;
 }
Beispiel #24
0
 /// <summary>Initializes a new instance of the <see cref="Head"/> class.</summary>
 /// <param name="repository">Host repository.</param>
 /// <param name="pointer">Target of this reference.</param>
 /// <exception cref="T:System.ArgumentNullException"><paramref name="repository"/> == <c>null</c>.</exception>
 internal Head(Repository repository, IRevisionPointer pointer)
     : base(repository, GitConstants.HEAD, pointer)
 {
 }
Beispiel #25
0
 /// <summary>Initializes a new instance of the <see cref="Head"/> class.</summary>
 /// <param name="repository">Host repository.</param>
 /// <exception cref="T:System.ArgumentNullException"><paramref name="repository"/> == <c>null</c>.</exception>
 internal Head(Repository repository)
     : base(repository, GitConstants.HEAD, GetHeadPointer(repository))
 {
 }
Beispiel #26
0
        /// <summary>Returns object pointed by HEAD.</summary>
        /// <param name="repository">Repository to get HEAD from.</param>
        /// <returns>Object pointed by HEAD of the specified repository.</returns>
        private static IRevisionPointer GetHeadPointer(Repository repository)
        {
            var head = repository.Accessor.QuerySymbolicReference.Invoke(
                new QuerySymbolicReferenceParameters(GitConstants.HEAD));

            switch(head.TargetType)
            {
                case ReferenceType.LocalBranch:
                    Branch branch;
                    lock(repository.Refs.Heads.SyncRoot)
                    {
                        branch = repository.Refs.Heads.TryGetItem(head.TargetObject);
                        if(branch == null)
                        {
                            var info = repository.Accessor.QueryBranch.Invoke(
                                new QueryBranchParameters(head.TargetObject, false));
                            if(info != null)
                            {
                                branch = repository.Refs.Heads.NotifyCreated(info);
                            }
                        }
                    }
                    if(branch == null)
                    {
                        return new NowherePointer(repository, head.TargetObject);
                    }
                    else
                    {
                        return branch;
                    }
                case ReferenceType.Revision:
                    lock(repository.Revisions.SyncRoot)
                    {
                        return repository.Revisions.GetOrCreateRevision(new Hash(head.TargetObject));
                    }
                default:
                    return new NowherePointer(repository, head.TargetObject);
            }
        }
Beispiel #27
0
        public Revision Merge(ICollection <IRevisionPointer> branches, bool noCommit, bool noFastForward, bool squash, string message)
        {
            Verify.Argument.IsValidRevisionPointerSequence(branches, Repository, "branches");
            Verify.Argument.IsTrue(branches.Count != 0, "branches",
                                   Resources.ExcCollectionMustContainAtLeastOneObject.UseAsFormat("branch"));
            Verify.State.IsFalse(IsEmpty,
                                 Resources.ExcCantDoOnEmptyRepository.UseAsFormat("merge"));

            if (branches.Count == 1)
            {
                foreach (var branch in branches)
                {
                    return(Merge(branch, noCommit, noFastForward, squash, message));
                }
            }
            var oldRevs     = new List <Revision>(branches.Count);
            var branchNames = new List <string>(branches.Count);

            foreach (var branch in branches)
            {
                oldRevs.Add(branch.Dereference());
                branchNames.Add(branch.FullName);
            }

            var currentBranch = CurrentBranch;

            using (Repository.Monitor.BlockNotifications(
                       RepositoryNotifications.Checkout,
                       RepositoryNotifications.WorktreeUpdated,
                       RepositoryNotifications.IndexUpdated,
                       RepositoryNotifications.BranchChanged))
            {
                try
                {
                    Repository.Accessor.Merge.Invoke(
                        new MergeParameters(branchNames)
                    {
                        NoCommit      = noCommit,
                        NoFastForward = noFastForward,
                        Squash        = squash,
                        Message       = message,
                    });
                }
                catch (AutomaticMergeFailedException)
                {
                    Repository.OnStateChanged();
                    Repository.Status.Refresh();
                    throw;
                }
            }

            if (currentBranch != null)
            {
                currentBranch.Refresh();
            }
            else
            {
                Refresh();
            }

            var headRev = Revision;

            if (noCommit)
            {
                Repository.OnStateChanged();
                Repository.Status.Refresh();
            }
            else
            {
                if (noFastForward || !oldRevs.Contains(headRev))                //not fast-forwarded
                {
                    Repository.OnCommitCreated(headRev);
                }
            }
            NotifyRelogRecordAdded();
            return(headRev);
        }
Beispiel #28
0
 /// <summary>Initializes a new instance of the <see cref="Head"/> class.</summary>
 /// <param name="repository">Host repository.</param>
 /// <exception cref="T:System.ArgumentNullException"><paramref name="repository"/> == <c>null</c>.</exception>
 internal Head(Repository repository)
     : base(repository, GitConstants.HEAD, GetHeadPointer(repository))
 {
 }
Beispiel #29
0
        public static User CreateUser(Repository repository, UserData userData)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(userData, "userData");

            return new User(repository, userData.UserName, userData.Email, userData.Commits);
        }
Beispiel #30
0
        public static TreeFile CreateTreeFile(Repository repository, TreeFileData treeFileData)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(treeFileData, "treeFileData");

            var shortName = treeFileData.ShortName.Length == 0 ?
                GetShortName(treeFileData.Name) : treeFileData.ShortName;
            return new TreeFile(repository, treeFileData.Name, null, treeFileData.FileStatus, shortName)
            {
                ConflictType = treeFileData.ConflictType,
                StagedStatus = treeFileData.StagedStatus,
            };
        }
Beispiel #31
0
        public static TreeDirectory CreateTreeDirectory(Repository repository, TreeDirectoryData treeDirectoryData)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(treeDirectoryData, "treeDirectoryData");

            var directory = new TreeDirectory(repository, treeDirectoryData.Name, null, treeDirectoryData.ShortName)
            {
                StagedStatus = treeDirectoryData.StagedStatus,
            };
            foreach(var subDirectory in treeDirectoryData.Directories)
            {
                directory.AddDirectory(CreateTreeDirectory(repository, subDirectory));
            }
            foreach(var file in treeDirectoryData.Files)
            {
                directory.AddFile(ObjectFactories.CreateTreeFile(repository, file));
            }
            return directory;
        }
Beispiel #32
0
        public static Tag CreateTag(Repository repository, TagData tagData)
        {
            Verify.Argument.IsNotNull(repository, "repository");
            Verify.Argument.IsNotNull(tagData, "tagData");

            Revision revision;
            lock(repository.Revisions.SyncRoot)
            {
                revision = repository.Revisions.GetOrCreateRevision(tagData.SHA1);
            }
            return new Tag(repository, tagData.Name, revision, tagData.TagType);
        }
Beispiel #33
0
 /// <summary>Initializes a new instance of the <see cref="Head"/> class.</summary>
 /// <param name="repository">Host repository.</param>
 /// <param name="pointer">Target of this reference.</param>
 /// <exception cref="T:System.ArgumentNullException"><paramref name="repository"/> == <c>null</c>.</exception>
 internal Head(Repository repository, IRevisionPointer pointer)
     : base(repository, GitConstants.HEAD, pointer)
 {
 }