Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
TooTallNate opened this issue Apr 1, 2011 · 6 comments
Open

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

TooTallNate opened this issue Apr 1, 2011 · 6 comments
Labels
Milestone

Comments

@TooTallNate
Copy link

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?

@samcday
Copy link
Contributor

samcday commented Apr 1, 2011

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
Copy link
Contributor

samcday commented Apr 3, 2011

@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");

@mildsunrise
Copy link
Contributor

@samcday Please, tag this as whishlist!

@mbostock
Copy link

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.

@mildsunrise
Copy link
Contributor

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).

@samcday
Copy link
Contributor

samcday commented Jun 27, 2013

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.

@ben ben mentioned this issue Jul 1, 2013
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants