Re: Complete http-pull; where should it go?
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- May 1, 2005, 20:46 UTC
- Message-ID
- <Pine.LNX.4.58.0505011337070.2296@ppc970.osdl.org>
- In-Reply-To
- <Pine.LNX.4.21.0505011544120.30848-100000@iabervon.org>
On Sun, 1 May 2005, Daniel Barkalow wrote:
Show 5 quoted lines
> > Right; what I want to make programs able to do is take explicit > references, instead of only taking the objects they reference. So you > say heads/master or heads/linus instead of > "198b0fb635ed8a007bac0c16eab112c5e2c7995c".
That's fine.
This is really just an issue of havign a function that does "get_sha1()", and then making the things that take command line arguments use that one instead of "get_sha1_hex()".
Then you can have rules like: - if it's a hex number, take it - if it's a filename, look it up - if ".git/refs + str is a filename, look it up.
Something like
int get_sha1(char *str, unsigned char *result)
{
static char pathname[PATH_MAX];if (get_sha1_hex(str, result) == 0) return 0; if (get_sha1_file(str, result) == 0) return 0; snprintf(pathname, sizeof(pathname), ".git/refs/%s", str); if (get_sha1_file(pathname, result) == 0) return 0; ... }
where you have
int get_sha1_file(char *path, unsigned char *result)
{
char buffer[60];
int fd = open(path, O_RDONLY);
int len;if (fd < 0) return -1; len = read(fd, buffer, sizeof(buffer)); close(fd); if (len < 40) return -1; return get_sha1_hex(buffer, result); } or whatever.
The _only_ thing I want to be careful about is that all the _internal_ stuff still have to use the strict "get_sha1_hex()" function, ie we should never _ever_ accept a tree object where the "sha1" ends up being anything but the hex thing. So this "generalized get_sha1()" would have to be used only on real user input (ie argv[] array and the like).
Linus