node-gitteh icon indicating copy to clipboard operation
node-gitteh copied to clipboard

Need some kind of high level "rev-parse" functionality.

Open TooTallNate opened this issue 13 years ago • 6 comments

It would be great to get some sort of "rev-parse" functionality that you could pass any revision identifier to and have it resolve to a SHA hash. Maybe something like:

// Resolve 'HEAD', asynchronous
repo.revParse("HEAD", function(err, sha) {
  if (err) throw err;
  repo.getCommit(sha, function(err, commit) {
    // Blah
  });
});

// Resolve the tag 'v1.0.0', synchronous
var sha = repo.revParse("v1.0.0");

// Resolve to an oid and get raw Buffer
repo.getRawObject(repo.revParse("HEAD:package.json")).data;

// This would be awesome too:
// All should return: 37d671c8470ca723b951d25dd882186ec6c65c28
repo.revParse("37d671c8470ca723b951d25d");
repo.revParse("37d671c8470ca72");
repo.revParse("37d671c");

Thoughts?

TooTallNate avatar Apr 01 '11 18:04 TooTallNate

I really like the sound of this!

My plan is to implement some high level "convenience" wrappers around the gitteh bindings once they're complete. I was planning on implementing these in JS. Your ideas for revParse would be a great first step!

I like the idea of revParse processing anything - particularly if you give it any ref and it will automatically peel the ref (if it's symbolic) and load the commit.

Not too sure about resolving fragment sha1's though - libgit2 doesn't support this. I guess we could scan the git repository on the filesystem and try that - but then we'd also have to scan packfiles too.

samcday avatar Apr 01 '11 23:04 samcday

@TooTallNate

What do you think if we made revParse just straight up retrieve the object you provide? In such a way that it retrieves

For example:

// Gives us a Commit object.
var commit = repository.revParse("HEAD");

// Gives us the Blob for mydir/blah.txt in HEAD revision:
var blob = repository.revParse("HEAD:mydir/blah.txt");

// Gives us the Tree for mydir in the v1.0.1 tag:
var tree = repository.revParse("v1.0.1:mydir");

samcday avatar Apr 03 '11 10:04 samcday

@samcday Please, tag this as whishlist!

mildsunrise avatar Jul 31 '12 09:07 mildsunrise

This would be a lovely feature. I'm using node-gitteh to implement a simple git-backed static file server, and supporting sha1 fragments in particular would be handy for short URLs. Revisions of the form "HEAD~1" would also be handy for comparing the latest and previous versions.

mbostock avatar Aug 17 '12 05:08 mbostock

Actually, a rev-parse can be a commit, a branch, a tag, or another reference. Thus, LibGit2 will return you the object (could be a Commit, or a Reference).

mildsunrise avatar Aug 17 '12 07:08 mildsunrise

Revparsing is available in libgit2 0.18.0, so we'll be offering this functionality in node-gitteh once we've released our corresponding 0.18.0 package.

samcday avatar Jun 27 '13 06:06 samcday