Add "get_sha1()" helper function.

This allows the programs to use various simplified versions of
the SHA1 names, eg just say "HEAD" for the SHA1 pointed to by
the .git/HEAD file etc.

For example, this commit has been done with

	git-commit-tree $(git-write-tree) -p HEAD

instead of the traditional "$(cat .git/HEAD)" syntax.
This commit is contained in:
Linus Torvalds
2005-05-01 16:36:56 -07:00
parent 68849b5442
commit 3c249c9506
16 changed files with 46 additions and 16 deletions

View File

@ -45,6 +45,35 @@ int get_sha1_hex(const char *hex, unsigned char *sha1)
return 0;
}
int get_sha1_file(const 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);
}
int get_sha1(const char *str, unsigned char *sha1)
{
static char pathname[PATH_MAX];
if (!get_sha1_hex(str, sha1))
return 0;
if (!get_sha1_file(str, sha1))
return 0;
snprintf(pathname, sizeof(pathname), ".git/%s", str);
if (!get_sha1_file(pathname, sha1))
return 0;
return -1;
}
char * sha1_to_hex(const unsigned char *sha1)
{
static char buffer[50];