-static int get_parent(char *name, unsigned char *result, int idx)
-{
- unsigned char sha1[20];
- int ret = get_extended_sha1(name, sha1);
- struct commit *commit;
- struct commit_list *p;
-
- if (ret)
- return ret;
- commit = lookup_commit_reference(sha1);
- if (!commit)
- return -1;
- if (parse_commit(commit))
- return -1;
- p = commit->parents;
- while (p) {
- if (!--idx) {
- memcpy(result, p->item->object.sha1, 20);
- return 0;
- }
- p = p->next;
- }
- return -1;
-}
-
-/*
- * This is like "get_sha1()", except it allows "sha1 expressions",
- * notably "xyz^" for "parent of xyz"
- */
-static int get_extended_sha1(char *name, unsigned char *sha1)
-{
- int parent;
- int len = strlen(name);
-
- parent = 1;
- if (len > 2 && name[len-1] >= '1' && name[len-1] <= '9') {
- parent = name[len-1] - '0';
- len--;
- }
- if (len > 1 && name[len-1] == '^') {
- int ret;
- name[len-1] = 0;
- ret = get_parent(name, sha1, parent);
- name[len-1] = '^';
- if (!ret)
- return 0;
- }
- return get_sha1(name, sha1);
-}
-