Beispiel #1
0
        /// <summary>
        /// Updates a reference for a given repository by reference name
        /// </summary>
        /// <remarks>
        /// http://developer.github.com/v3/git/refs/#update-a-reference
        /// </remarks>
        /// <param name="owner">The owner of the repository</param>
        /// <param name="name">The name of the repository</param>
        /// <param name="reference">The canonical name of the reference without the 'refs/' prefix. e.g. "heads/master" or "tags/release-1"</param>
        /// <param name="referenceUpdate">The updated reference data</param>
        /// <returns></returns>
        public IObservable <Reference> Update(string owner, string name, string reference, ReferenceUpdate referenceUpdate)
        {
            Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
            Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
            Ensure.ArgumentNotNullOrEmptyString(reference, nameof(reference));
            Ensure.ArgumentNotNull(referenceUpdate, nameof(referenceUpdate));

            return(_reference.Update(owner, name, reference, referenceUpdate).ToObservable());
        }
    public async Task CanUpdateAReference()
    {
        var firstBlob = new NewBlob
        {
            Content  = "Hello World!",
            Encoding = EncodingType.Utf8
        };
        var firstBlobResult = await _github.Git.Blob.Create(_context.RepositoryOwner, _context.RepositoryName, firstBlob);

        var secondBlob = new NewBlob
        {
            Content  = "This is a test!",
            Encoding = EncodingType.Utf8
        };
        var secondBlobResult = await _github.Git.Blob.Create(_context.RepositoryOwner, _context.RepositoryName, secondBlob);

        var firstTree = new NewTree();

        firstTree.Tree.Add(new NewTreeItem
        {
            Mode = FileMode.File,
            Type = TreeType.Blob,
            Path = "README.md",
            Sha  = firstBlobResult.Sha
        });

        var firstTreeResult = await _github.Git.Tree.Create(_context.RepositoryOwner, _context.RepositoryName, firstTree);

        var firstCommit       = new NewCommit("This is a new commit", firstTreeResult.Sha);
        var firstCommitResult = await _github.Git.Commit.Create(_context.RepositoryOwner, _context.RepositoryName, firstCommit);

        var newReference = new NewReference("heads/develop", firstCommitResult.Sha);
        await _fixture.Create(_context.RepositoryOwner, _context.RepositoryName, newReference);

        var secondTree = new NewTree();

        secondTree.Tree.Add(new NewTreeItem
        {
            Mode = FileMode.File,
            Type = TreeType.Blob,
            Path = "README.md",
            Sha  = secondBlobResult.Sha
        });

        var secondTreeResult = await _github.Git.Tree.Create(_context.RepositoryOwner, _context.RepositoryName, secondTree);

        var secondCommit       = new NewCommit("This is a new commit", secondTreeResult.Sha, firstCommitResult.Sha);
        var secondCommitResult = await _github.Git.Commit.Create(_context.RepositoryOwner, _context.RepositoryName, secondCommit);

        var referenceUpdate = new ReferenceUpdate(secondCommitResult.Sha);

        var result = await _fixture.Update(_context.RepositoryOwner, _context.RepositoryName, "heads/develop", referenceUpdate);

        Assert.Equal(secondCommitResult.Sha, result.Object.Sha);
    }
Beispiel #3
0
 public static async Task <Reference> CreateOrUpdate(this IReferencesClient client, string repoOwner, string repoName, string refName, string sha, bool force = false)
 {
     try
     {
         return(await client.Update(repoOwner, repoName, refName, new ReferenceUpdate(sha, force)));
     }
     catch (Exception)
     {
         return(await client.Create(repoOwner, repoName, new NewReference(refName, sha)));
     }
 }