Skip to content

Commit

Permalink
Add "get_sha1()" helper function.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Linus Torvalds committed May 1, 2005
1 parent 68849b5 commit 3c249c9
Show file tree
Hide file tree
Showing 16 changed files with 46 additions and 16 deletions.
1 change: 1 addition & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ extern int write_sha1_from_fd(const unsigned char *sha1, int fd);
extern int has_sha1_file(const unsigned char *sha1);

/* Convert to/from hex/sha1 representation */
extern int get_sha1(const char *str, unsigned char *sha1);
extern int get_sha1_hex(const char *hex, unsigned char *sha1);
extern char *sha1_to_hex(const unsigned char *sha1); /* static buffer result! */

Expand Down
2 changes: 1 addition & 1 deletion cat-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ int main(int argc, char **argv)
void *buf;
unsigned long size;

if (argc != 3 || get_sha1_hex(argv[2], sha1))
if (argc != 3 || get_sha1(argv[2], sha1))
usage("cat-file [-t | tagname] <sha1>");
buf = read_sha1_file(sha1, type, &size);
if (!buf)
Expand Down
2 changes: 1 addition & 1 deletion commit-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ int main(int argc, char **argv)
for (i = 2; i < argc; i += 2) {
char *a, *b;
a = argv[i]; b = argv[i+1];
if (!b || strcmp(a, "-p") || get_sha1_hex(b, parent_sha1[parents]))
if (!b || strcmp(a, "-p") || get_sha1(b, parent_sha1[parents]))
usage(commit_tree_usage);
check_valid(parent_sha1[parents], "commit");
parents++;
Expand Down
2 changes: 1 addition & 1 deletion convert-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ int main(int argc, char **argv)
unsigned char sha1[20];
struct entry *entry;

if (argc != 2 || get_sha1_hex(argv[1], sha1))
if (argc != 2 || get_sha1(argv[1], sha1))
usage("convert-cache <sha1>");

entry = convert_entry(sha1);
Expand Down
2 changes: 1 addition & 1 deletion diff-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ int main(int argc, char **argv)
usage(diff_cache_usage);
}

if (argc != 2 || get_sha1_hex(argv[1], tree_sha1))
if (argc != 2 || get_sha1(argv[1], tree_sha1))
usage(diff_cache_usage);

mark_merge_entries();
Expand Down
2 changes: 1 addition & 1 deletion diff-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ int main(int argc, char **argv)
usage(diff_tree_usage);
}

if (argc < 3 || get_sha1_hex(argv[1], old) || get_sha1_hex(argv[2], new))
if (argc < 3 || get_sha1(argv[1], old) || get_sha1(argv[2], new))
usage(diff_tree_usage);

if (argc > 3) {
Expand Down
4 changes: 2 additions & 2 deletions export.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ int main(int argc, char **argv)
unsigned char top_sha1[20];

if (argc < 2 || argc > 4 ||
get_sha1_hex(argv[1], top_sha1) ||
(argc == 3 && get_sha1_hex(argv[2], base_sha1)))
get_sha1(argv[1], top_sha1) ||
(argc == 3 && get_sha1(argv[2], base_sha1)))
usage("git-export top [base]");
export(get_commit(top_sha1), argc==3 ? get_commit(base_sha1) : NULL);
return 0;
Expand Down
2 changes: 1 addition & 1 deletion fsck-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ int main(int argc, char **argv)
if (*arg == '-')
continue;

if (!get_sha1_hex(arg, head_sha1)) {
if (!get_sha1(arg, head_sha1)) {
struct commit *commit = lookup_commit(head_sha1);
struct object *obj;

Expand Down
2 changes: 1 addition & 1 deletion ls-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ int main(int argc, char **argv)

if (argc != 2)
usage(ls_tree_usage);
if (get_sha1_hex(argv[1], sha1) < 0)
if (get_sha1(argv[1], sha1) < 0)
usage(ls_tree_usage);
sha1_file_directory = getenv(DB_ENVIRONMENT);
if (!sha1_file_directory)
Expand Down
4 changes: 2 additions & 2 deletions merge-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ int main(int argc, char **argv)
unsigned char rev1key[20], rev2key[20];

if (argc != 3 ||
get_sha1_hex(argv[1], rev1key) ||
get_sha1_hex(argv[2], rev2key)) {
get_sha1(argv[1], rev1key) ||
get_sha1(argv[2], rev2key)) {
usage("merge-base <commit-id> <commit-id>");
}
rev1 = lookup_commit(rev1key);
Expand Down
2 changes: 1 addition & 1 deletion read-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ int main(int argc, char **argv)
merge = 1;
continue;
}
if (get_sha1_hex(arg, sha1) < 0)
if (get_sha1(arg, sha1) < 0)
usage(read_tree_usage);
if (stage > 3)
usage(read_tree_usage);
Expand Down
2 changes: 1 addition & 1 deletion rev-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ int main(int argc, char **argv)
struct commit_list *list = NULL;
struct commit *commit;

if (argc != 2 || get_sha1_hex(argv[1], sha1))
if (argc != 2 || get_sha1(argv[1], sha1))
usage("rev-list <commit-id>");

commit = lookup_commit(sha1);
Expand Down
2 changes: 1 addition & 1 deletion rev-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ int main(int argc, char **argv)
arg++;
basemask |= 1<<nr;
}
if (nr >= MAX_COMMITS || get_sha1_hex(arg, sha1[nr]))
if (nr >= MAX_COMMITS || get_sha1(arg, sha1[nr]))
usage("rev-tree [--edges] [--cache <cache-file>] <commit-id> [<commit-id>]");
process_commit(sha1[nr]);
nr++;
Expand Down
29 changes: 29 additions & 0 deletions sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
2 changes: 1 addition & 1 deletion tar-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ int main(int argc, char **argv)
basedir = argv[2];
/* FALLTHROUGH */
case 2:
if (get_sha1_hex(argv[1], sha1) < 0)
if (get_sha1(argv[1], sha1) < 0)
usage(tar_tree_usage);
break;
default:
Expand Down
2 changes: 1 addition & 1 deletion unpack-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ int main(int argc, char **argv)
{
unsigned char sha1[20];

if (argc != 2 || get_sha1_hex(argv[1], sha1))
if (argc != 2 || get_sha1(argv[1], sha1))
usage("unpack-file.c <sha1>");

puts(create_temp_file(sha1));
Expand Down

0 comments on commit 3c249c9

Please sign in to comment.