sha1_name: convert get_sha1* to get_oid*

Now that all the callers of get_sha1 directly or indirectly use struct
object_id, rename the functions starting with get_sha1 to start with
get_oid.  Convert the internals in sha1_name.c to use struct object_id
as well, and eliminate explicit length checks where possible.  Convert a
use of 40 in get_oid_basic to GIT_SHA1_HEXSZ.

Outside of sha1_name.c and cache.h, this transition was made with the
following semantic patch:

@@
expression E1, E2;
@@
- get_sha1(E1, E2.hash)
+ get_oid(E1, &E2)

@@
expression E1, E2;
@@
- get_sha1(E1, E2->hash)
+ get_oid(E1, E2)

@@
expression E1, E2;
@@
- get_sha1_committish(E1, E2.hash)
+ get_oid_committish(E1, &E2)

@@
expression E1, E2;
@@
- get_sha1_committish(E1, E2->hash)
+ get_oid_committish(E1, E2)

@@
expression E1, E2;
@@
- get_sha1_treeish(E1, E2.hash)
+ get_oid_treeish(E1, &E2)

@@
expression E1, E2;
@@
- get_sha1_treeish(E1, E2->hash)
+ get_oid_treeish(E1, E2)

@@
expression E1, E2;
@@
- get_sha1_commit(E1, E2.hash)
+ get_oid_commit(E1, &E2)

@@
expression E1, E2;
@@
- get_sha1_commit(E1, E2->hash)
+ get_oid_commit(E1, E2)

@@
expression E1, E2;
@@
- get_sha1_tree(E1, E2.hash)
+ get_oid_tree(E1, &E2)

@@
expression E1, E2;
@@
- get_sha1_tree(E1, E2->hash)
+ get_oid_tree(E1, E2)

@@
expression E1, E2;
@@
- get_sha1_blob(E1, E2.hash)
+ get_oid_blob(E1, &E2)

@@
expression E1, E2;
@@
- get_sha1_blob(E1, E2->hash)
+ get_oid_blob(E1, E2)

@@
expression E1, E2, E3, E4;
@@
- get_sha1_with_context(E1, E2, E3.hash, E4)
+ get_oid_with_context(E1, E2, &E3, E4)

@@
expression E1, E2, E3, E4;
@@
- get_sha1_with_context(E1, E2, E3->hash, E4)
+ get_oid_with_context(E1, E2, E3, E4)

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2017-07-13 23:49:28 +00:00 committed by Junio C Hamano
parent 15be4a5d38
commit e82caf384b
20 changed files with 145 additions and 154 deletions

View File

@ -3551,7 +3551,7 @@ static int try_threeway(struct apply_state *state,
/* Preimage the patch was prepared for */ /* Preimage the patch was prepared for */
if (patch->is_new) if (patch->is_new)
write_sha1_file("", 0, blob_type, pre_oid.hash); write_sha1_file("", 0, blob_type, pre_oid.hash);
else if (get_sha1(patch->old_sha1_prefix, pre_oid.hash) || else if (get_oid(patch->old_sha1_prefix, &pre_oid) ||
read_blob_object(&buf, &pre_oid, patch->old_mode)) read_blob_object(&buf, &pre_oid, patch->old_mode))
return error(_("repository lacks the necessary blob to fall back on 3-way merge.")); return error(_("repository lacks the necessary blob to fall back on 3-way merge."));
@ -4075,7 +4075,7 @@ static int build_fake_ancestor(struct apply_state *state, struct patch *list)
else else
return error(_("sha1 information is lacking or " return error(_("sha1 information is lacking or "
"useless for submodule %s"), name); "useless for submodule %s"), name);
} else if (!get_sha1_blob(patch->old_sha1_prefix, oid.hash)) { } else if (!get_oid_blob(patch->old_sha1_prefix, &oid)) {
; /* ok */ ; /* ok */
} else if (!patch->lines_added && !patch->lines_deleted) { } else if (!patch->lines_added && !patch->lines_deleted) {
/* mode-only change: update the current */ /* mode-only change: update the current */

View File

@ -358,7 +358,7 @@ static void parse_treeish_arg(const char **argv,
free(ref); free(ref);
} }
if (get_sha1(name, oid.hash)) if (get_oid(name, &oid))
die("Not a valid object name"); die("Not a valid object name");
commit = lookup_commit_reference_gently(&oid, 1); commit = lookup_commit_reference_gently(&oid, 1);

View File

@ -1131,7 +1131,7 @@ static int index_has_changes(struct strbuf *sb)
struct object_id head; struct object_id head;
int i; int i;
if (!get_sha1_tree("HEAD", head.hash)) { if (!get_oid_tree("HEAD", &head)) {
struct diff_options opt; struct diff_options opt;
diff_setup(&opt); diff_setup(&opt);
@ -1432,7 +1432,7 @@ static void write_index_patch(const struct am_state *state)
struct rev_info rev_info; struct rev_info rev_info;
FILE *fp; FILE *fp;
if (!get_sha1_tree("HEAD", head.hash)) if (!get_oid_tree("HEAD", &head))
tree = lookup_tree(&head); tree = lookup_tree(&head);
else else
tree = lookup_tree(&empty_tree_oid); tree = lookup_tree(&empty_tree_oid);
@ -1661,7 +1661,7 @@ static void do_commit(const struct am_state *state)
if (write_cache_as_tree(tree.hash, 0, NULL)) if (write_cache_as_tree(tree.hash, 0, NULL))
die(_("git write-tree failed to write a tree")); die(_("git write-tree failed to write a tree"));
if (!get_sha1_commit("HEAD", parent.hash)) { if (!get_oid_commit("HEAD", &parent)) {
old_oid = &parent; old_oid = &parent;
commit_list_insert(lookup_commit(&parent), &parents); commit_list_insert(lookup_commit(&parent), &parents);
} else { } else {

View File

@ -63,8 +63,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
if (unknown_type) if (unknown_type)
flags |= OBJECT_INFO_ALLOW_UNKNOWN_TYPE; flags |= OBJECT_INFO_ALLOW_UNKNOWN_TYPE;
if (get_sha1_with_context(obj_name, GET_SHA1_RECORD_PATH, if (get_oid_with_context(obj_name, GET_SHA1_RECORD_PATH,
oid.hash, &obj_context)) &oid, &obj_context))
die("Not a valid object name %s", obj_name); die("Not a valid object name %s", obj_name);
if (!path) if (!path)
@ -364,7 +364,7 @@ static void batch_one_object(const char *obj_name, struct batch_options *opt,
int flags = opt->follow_symlinks ? GET_SHA1_FOLLOW_SYMLINKS : 0; int flags = opt->follow_symlinks ? GET_SHA1_FOLLOW_SYMLINKS : 0;
enum follow_symlinks_result result; enum follow_symlinks_result result;
result = get_sha1_with_context(obj_name, flags, data->oid.hash, &ctx); result = get_oid_with_context(obj_name, flags, &data->oid, &ctx);
if (result != FOUND) { if (result != FOUND) {
switch (result) { switch (result) {
case MISSING_OBJECT: case MISSING_OBJECT:

View File

@ -56,7 +56,7 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
struct object_id oid; struct object_id oid;
if (argc <= ++i) if (argc <= ++i)
usage(commit_tree_usage); usage(commit_tree_usage);
if (get_sha1_commit(argv[i], oid.hash)) if (get_oid_commit(argv[i], &oid))
die("Not a valid object name %s", argv[i]); die("Not a valid object name %s", argv[i]);
assert_sha1_type(oid.hash, OBJ_COMMIT); assert_sha1_type(oid.hash, OBJ_COMMIT);
new_parent(lookup_commit(&oid), &parents); new_parent(lookup_commit(&oid), &parents);
@ -106,7 +106,7 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
continue; continue;
} }
if (get_sha1_tree(arg, tree_oid.hash)) if (get_oid_tree(arg, &tree_oid))
die("Not a valid object name %s", arg); die("Not a valid object name %s", arg);
if (got_tree) if (got_tree)
die("Cannot give more than one trees"); die("Cannot give more than one trees");

View File

@ -510,7 +510,7 @@ static int run_status(FILE *fp, const char *index_file, const char *prefix, int
s->index_file = index_file; s->index_file = index_file;
s->fp = fp; s->fp = fp;
s->nowarn = nowarn; s->nowarn = nowarn;
s->is_initial = get_sha1(s->reference, oid.hash) ? 1 : 0; s->is_initial = get_oid(s->reference, &oid) ? 1 : 0;
if (!s->is_initial) if (!s->is_initial)
hashcpy(s->sha1_commit, oid.hash); hashcpy(s->sha1_commit, oid.hash);
s->status_format = status_format; s->status_format = status_format;
@ -891,7 +891,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
if (amend) if (amend)
parent = "HEAD^1"; parent = "HEAD^1";
if (get_sha1(parent, oid.hash)) { if (get_oid(parent, &oid)) {
int i, ita_nr = 0; int i, ita_nr = 0;
for (i = 0; i < active_nr; i++) for (i = 0; i < active_nr; i++)
@ -1387,7 +1387,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
fd = hold_locked_index(&index_lock, 0); fd = hold_locked_index(&index_lock, 0);
s.is_initial = get_sha1(s.reference, oid.hash) ? 1 : 0; s.is_initial = get_oid(s.reference, &oid) ? 1 : 0;
if (!s.is_initial) if (!s.is_initial)
hashcpy(s.sha1_commit, oid.hash); hashcpy(s.sha1_commit, oid.hash);
@ -1657,7 +1657,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
status_format = STATUS_FORMAT_NONE; /* Ignore status.short */ status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
s.colopts = 0; s.colopts = 0;
if (get_sha1("HEAD", oid.hash)) if (get_oid("HEAD", &oid))
current_head = NULL; current_head = NULL;
else { else {
current_head = lookup_commit_or_die(&oid, "HEAD"); current_head = lookup_commit_or_die(&oid, "HEAD");

View File

@ -1207,8 +1207,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
break; break;
} }
if (get_sha1_with_context(arg, GET_SHA1_RECORD_PATH, if (get_oid_with_context(arg, GET_SHA1_RECORD_PATH,
oid.hash, &oc)) { &oid, &oc)) {
if (seen_dashdash) if (seen_dashdash)
die(_("unable to resolve revision: %s"), arg); die(_("unable to resolve revision: %s"), arg);
break; break;

View File

@ -484,8 +484,8 @@ static int show_blob_object(const struct object_id *oid, struct rev_info *rev, c
!DIFF_OPT_TST(&rev->diffopt, ALLOW_TEXTCONV)) !DIFF_OPT_TST(&rev->diffopt, ALLOW_TEXTCONV))
return stream_blob_to_fd(1, oid, NULL, 0); return stream_blob_to_fd(1, oid, NULL, 0);
if (get_sha1_with_context(obj_name, GET_SHA1_RECORD_PATH, if (get_oid_with_context(obj_name, GET_SHA1_RECORD_PATH,
oidc.hash, &obj_context)) &oidc, &obj_context))
die(_("Not a valid object name %s"), obj_name); die(_("Not a valid object name %s"), obj_name);
if (!obj_context.path || if (!obj_context.path ||
!textconv_object(obj_context.path, obj_context.mode, &oidc, 1, &buf, &size)) { !textconv_object(obj_context.path, obj_context.mode, &oidc, 1, &buf, &size)) {

View File

@ -50,7 +50,7 @@ static int show_reference(const char *refname, const struct object_id *oid,
struct object_id object; struct object_id object;
enum object_type obj_type, repl_type; enum object_type obj_type, repl_type;
if (get_sha1(refname, object.hash)) if (get_oid(refname, &object))
return error("Failed to resolve '%s' as a valid ref.", refname); return error("Failed to resolve '%s' as a valid ref.", refname);
obj_type = sha1_object_info(object.hash, NULL); obj_type = sha1_object_info(object.hash, NULL);
@ -365,7 +365,7 @@ static void check_one_mergetag(struct commit *commit,
/* iterate over new parents */ /* iterate over new parents */
for (i = 1; i < mergetag_data->argc; i++) { for (i = 1; i < mergetag_data->argc; i++) {
struct object_id oid; struct object_id oid;
if (get_sha1(mergetag_data->argv[i], oid.hash) < 0) if (get_oid(mergetag_data->argv[i], &oid) < 0)
die(_("Not a valid object name: '%s'"), mergetag_data->argv[i]); die(_("Not a valid object name: '%s'"), mergetag_data->argv[i]);
if (!oidcmp(&tag->tagged->oid, &oid)) if (!oidcmp(&tag->tagged->oid, &oid))
return; /* found */ return; /* found */

View File

@ -219,8 +219,8 @@ static void parse_args(struct pathspec *pathspec,
* has to be unambiguous. If there is a single argument, it * has to be unambiguous. If there is a single argument, it
* can not be a tree * can not be a tree
*/ */
else if ((!argv[1] && !get_sha1_committish(argv[0], unused.hash)) || else if ((!argv[1] && !get_oid_committish(argv[0], &unused)) ||
(argv[1] && !get_sha1_treeish(argv[0], unused.hash))) { (argv[1] && !get_oid_treeish(argv[0], &unused))) {
/* /*
* Ok, argv[0] looks like a commit/tree; it should not * Ok, argv[0] looks like a commit/tree; it should not
* be a filename. * be a filename.
@ -310,13 +310,13 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
load_submodule_cache(); load_submodule_cache();
unborn = !strcmp(rev, "HEAD") && get_sha1("HEAD", oid.hash); unborn = !strcmp(rev, "HEAD") && get_oid("HEAD", &oid);
if (unborn) { if (unborn) {
/* reset on unborn branch: treat as reset to empty tree */ /* reset on unborn branch: treat as reset to empty tree */
hashcpy(oid.hash, EMPTY_TREE_SHA1_BIN); hashcpy(oid.hash, EMPTY_TREE_SHA1_BIN);
} else if (!pathspec.nr) { } else if (!pathspec.nr) {
struct commit *commit; struct commit *commit;
if (get_sha1_committish(rev, oid.hash)) if (get_oid_committish(rev, &oid))
die(_("Failed to resolve '%s' as a valid revision."), rev); die(_("Failed to resolve '%s' as a valid revision."), rev);
commit = lookup_commit_reference(&oid); commit = lookup_commit_reference(&oid);
if (!commit) if (!commit)
@ -324,7 +324,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
oidcpy(&oid, &commit->object.oid); oidcpy(&oid, &commit->object.oid);
} else { } else {
struct tree *tree; struct tree *tree;
if (get_sha1_treeish(rev, oid.hash)) if (get_oid_treeish(rev, &oid))
die(_("Failed to resolve '%s' as a valid tree."), rev); die(_("Failed to resolve '%s' as a valid tree."), rev);
tree = parse_tree_indirect(&oid); tree = parse_tree_indirect(&oid);
if (!tree) if (!tree)

View File

@ -274,7 +274,7 @@ static int try_difference(const char *arg)
return 0; return 0;
} }
if (!get_sha1_committish(this, oid.hash) && !get_sha1_committish(next, end.hash)) { if (!get_oid_committish(this, &oid) && !get_oid_committish(next, &end)) {
show_rev(NORMAL, &end, next); show_rev(NORMAL, &end, next);
show_rev(symmetric ? NORMAL : REVERSED, &oid, this); show_rev(symmetric ? NORMAL : REVERSED, &oid, this);
if (symmetric) { if (symmetric) {
@ -328,7 +328,7 @@ static int try_parent_shorthands(const char *arg)
return 0; return 0;
*dotdot = 0; *dotdot = 0;
if (get_sha1_committish(arg, oid.hash)) { if (get_oid_committish(arg, &oid)) {
*dotdot = '^'; *dotdot = '^';
return 0; return 0;
} }
@ -911,7 +911,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
name++; name++;
type = REVERSED; type = REVERSED;
} }
if (!get_sha1_with_context(name, flags, oid.hash, &unused)) { if (!get_oid_with_context(name, flags, &oid, &unused)) {
if (verify) if (verify)
revs_count++; revs_count++;
else else

View File

@ -393,7 +393,7 @@ static int append_head_ref(const char *refname, const struct object_id *oid,
/* If both heads/foo and tags/foo exists, get_sha1 would /* If both heads/foo and tags/foo exists, get_sha1 would
* get confused. * get confused.
*/ */
if (get_sha1(refname + ofs, tmp.hash) || oidcmp(&tmp, oid)) if (get_oid(refname + ofs, &tmp) || oidcmp(&tmp, oid))
ofs = 5; ofs = 5;
return append_ref(refname + ofs, oid, 0); return append_ref(refname + ofs, oid, 0);
} }
@ -408,7 +408,7 @@ static int append_remote_ref(const char *refname, const struct object_id *oid,
/* If both heads/foo and tags/foo exists, get_sha1 would /* If both heads/foo and tags/foo exists, get_sha1 would
* get confused. * get confused.
*/ */
if (get_sha1(refname + ofs, tmp.hash) || oidcmp(&tmp, oid)) if (get_oid(refname + ofs, &tmp) || oidcmp(&tmp, oid))
ofs = 5; ofs = 5;
return append_ref(refname + ofs, oid, 0); return append_ref(refname + ofs, oid, 0);
} }
@ -514,7 +514,7 @@ static int show_independent(struct commit **rev,
static void append_one_rev(const char *av) static void append_one_rev(const char *av)
{ {
struct object_id revkey; struct object_id revkey;
if (!get_sha1(av, revkey.hash)) { if (!get_oid(av, &revkey)) {
append_ref(av, &revkey, 0); append_ref(av, &revkey, 0);
return; return;
} }
@ -808,7 +808,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
die(Q_("cannot handle more than %d rev.", die(Q_("cannot handle more than %d rev.",
"cannot handle more than %d revs.", "cannot handle more than %d revs.",
MAX_REVS), MAX_REVS); MAX_REVS), MAX_REVS);
if (get_sha1(ref_name[num_rev], revkey.hash)) if (get_oid(ref_name[num_rev], &revkey))
die(_("'%s' is not a valid ref."), ref_name[num_rev]); die(_("'%s' is not a valid ref."), ref_name[num_rev]);
commit = lookup_commit_reference(&revkey); commit = lookup_commit_reference(&revkey);
if (!commit) if (!commit)

17
cache.h
View File

@ -1305,16 +1305,15 @@ struct object_context {
GET_SHA1_TREE | GET_SHA1_TREEISH | \ GET_SHA1_TREE | GET_SHA1_TREEISH | \
GET_SHA1_BLOB) GET_SHA1_BLOB)
extern int get_sha1(const char *str, unsigned char *sha1);
extern int get_sha1_commit(const char *str, unsigned char *sha1);
extern int get_sha1_committish(const char *str, unsigned char *sha1);
extern int get_sha1_tree(const char *str, unsigned char *sha1);
extern int get_sha1_treeish(const char *str, unsigned char *sha1);
extern int get_sha1_blob(const char *str, unsigned char *sha1);
extern void maybe_die_on_misspelt_object_name(const char *name, const char *prefix);
extern int get_sha1_with_context(const char *str, unsigned flags, unsigned char *sha1, struct object_context *oc);
extern int get_oid(const char *str, struct object_id *oid); extern int get_oid(const char *str, struct object_id *oid);
extern int get_oid_commit(const char *str, struct object_id *oid);
extern int get_oid_committish(const char *str, struct object_id *oid);
extern int get_oid_tree(const char *str, struct object_id *oid);
extern int get_oid_treeish(const char *str, struct object_id *oid);
extern int get_oid_blob(const char *str, struct object_id *oid);
extern void maybe_die_on_misspelt_object_name(const char *name, const char *prefix);
extern int get_oid_with_context(const char *str, unsigned flags, struct object_id *oid, struct object_context *oc);
typedef int each_abbrev_fn(const struct object_id *oid, void *); typedef int each_abbrev_fn(const struct object_id *oid, void *);
extern int for_each_abbrev(const char *prefix, each_abbrev_fn, void *); extern int for_each_abbrev(const char *prefix, each_abbrev_fn, void *);

View File

@ -59,7 +59,7 @@ struct commit *lookup_commit_reference_by_name(const char *name)
struct object_id oid; struct object_id oid;
struct commit *commit; struct commit *commit;
if (get_sha1_committish(name, oid.hash)) if (get_oid_committish(name, &oid))
return NULL; return NULL;
commit = lookup_commit_reference(&oid); commit = lookup_commit_reference(&oid);
if (parse_commit(commit)) if (parse_commit(commit))
@ -1587,7 +1587,7 @@ struct commit *get_merge_parent(const char *name)
struct object *obj; struct object *obj;
struct commit *commit; struct commit *commit;
struct object_id oid; struct object_id oid;
if (get_sha1(name, oid.hash)) if (get_oid(name, &oid))
return NULL; return NULL;
obj = parse_object(&oid); obj = parse_object(&oid);
commit = (struct commit *)peel_to_type(name, 0, obj, OBJ_COMMIT); commit = (struct commit *)peel_to_type(name, 0, obj, OBJ_COMMIT);

View File

@ -1026,7 +1026,7 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
t->dirty = 0; t->dirty = 0;
if (flags & NOTES_INIT_EMPTY || !notes_ref || if (flags & NOTES_INIT_EMPTY || !notes_ref ||
get_sha1_treeish(notes_ref, object_oid.hash)) get_oid_treeish(notes_ref, &object_oid))
return; return;
if (flags & NOTES_INIT_WRITABLE && read_ref(notes_ref, object_oid.hash)) if (flags & NOTES_INIT_WRITABLE && read_ref(notes_ref, object_oid.hash))
die("Cannot use notes ref %s", notes_ref); die("Cannot use notes ref %s", notes_ref);

View File

@ -1078,7 +1078,7 @@ static int try_explicit_object_name(const char *name,
return 0; return 0;
} }
if (get_sha1(name, oid.hash)) if (get_oid(name, &oid))
return -1; return -1;
if (match) { if (match) {

View File

@ -1303,7 +1303,7 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags,
flags ^= UNINTERESTING | BOTTOM; flags ^= UNINTERESTING | BOTTOM;
arg++; arg++;
} }
if (get_sha1_committish(arg, oid.hash)) if (get_oid_committish(arg, &oid))
return 0; return 0;
while (1) { while (1) {
it = get_reference(revs, arg, &oid, 0); it = get_reference(revs, arg, &oid, 0);
@ -1467,8 +1467,8 @@ static int handle_dotdot_1(const char *arg, char *dotdot,
if (!*b_name) if (!*b_name)
b_name = "HEAD"; b_name = "HEAD";
if (get_sha1_with_context(a_name, oc_flags, a_oid.hash, a_oc) || if (get_oid_with_context(a_name, oc_flags, &a_oid, a_oc) ||
get_sha1_with_context(b_name, oc_flags, b_oid.hash, b_oc)) get_oid_with_context(b_name, oc_flags, &b_oid, b_oc))
return -1; return -1;
if (!cant_be_filename) { if (!cant_be_filename) {
@ -1602,7 +1602,7 @@ int handle_revision_arg(const char *arg_, struct rev_info *revs, int flags, unsi
if (revarg_opt & REVARG_COMMITTISH) if (revarg_opt & REVARG_COMMITTISH)
get_sha1_flags |= GET_SHA1_COMMITTISH; get_sha1_flags |= GET_SHA1_COMMITTISH;
if (get_sha1_with_context(arg, get_sha1_flags, oid.hash, &oc)) if (get_oid_with_context(arg, get_sha1_flags, &oid, &oc))
return revs->ignore_missing ? 0 : -1; return revs->ignore_missing ? 0 : -1;
if (!cant_be_filename) if (!cant_be_filename)
verify_non_filename(revs->prefix, arg); verify_non_filename(revs->prefix, arg);
@ -2321,7 +2321,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
struct object_id oid; struct object_id oid;
struct object *object; struct object *object;
struct object_context oc; struct object_context oc;
if (get_sha1_with_context(revs->def, 0, oid.hash, &oc)) if (get_oid_with_context(revs->def, 0, &oid, &oc))
diagnose_missing_default(revs->def); diagnose_missing_default(revs->def);
object = get_reference(revs, revs->def, &oid, 0); object = get_reference(revs, revs->def, &oid, 0);
add_pending_object_with_mode(revs, object, revs->def, oc.mode); add_pending_object_with_mode(revs, object, revs->def, oc.mode);

View File

@ -2130,8 +2130,8 @@ cleanup_head_ref:
log_tree_opt.disable_stdin = 1; log_tree_opt.disable_stdin = 1;
if (read_oneliner(&buf, rebase_path_orig_head(), 0) && if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
!get_sha1(buf.buf, orig.hash) && !get_oid(buf.buf, &orig) &&
!get_sha1("HEAD", head.hash)) { !get_oid("HEAD", &head)) {
diff_tree_oid(&orig, &head, "", diff_tree_oid(&orig, &head, "",
&log_tree_opt.diffopt); &log_tree_opt.diffopt);
log_tree_diff_flush(&log_tree_opt); log_tree_diff_flush(&log_tree_opt);
@ -2267,7 +2267,7 @@ int sequencer_continue(struct replay_opts *opts)
struct object_id oid; struct object_id oid;
if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) && if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
!get_sha1_committish(buf.buf, oid.hash)) !get_oid_committish(buf.buf, &oid))
record_in_rewritten(&oid, peek_command(&todo_list, 0)); record_in_rewritten(&oid, peek_command(&todo_list, 0));
strbuf_release(&buf); strbuf_release(&buf);
} }

View File

@ -10,7 +10,7 @@
#include "dir.h" #include "dir.h"
#include "sha1-array.h" #include "sha1-array.h"
static int get_sha1_oneline(const char *, unsigned char *, struct commit_list *); static int get_oid_oneline(const char *, struct object_id *, struct commit_list *);
typedef int (*disambiguate_hint_fn)(const struct object_id *, void *); typedef int (*disambiguate_hint_fn)(const struct object_id *, void *);
@ -200,7 +200,7 @@ static void find_short_packed_object(struct disambiguate_state *ds)
#define SHORT_NAME_AMBIGUOUS (-2) #define SHORT_NAME_AMBIGUOUS (-2)
static int finish_object_disambiguation(struct disambiguate_state *ds, static int finish_object_disambiguation(struct disambiguate_state *ds,
unsigned char *sha1) struct object_id *oid)
{ {
if (ds->ambiguous) if (ds->ambiguous)
return SHORT_NAME_AMBIGUOUS; return SHORT_NAME_AMBIGUOUS;
@ -229,7 +229,7 @@ static int finish_object_disambiguation(struct disambiguate_state *ds,
if (!ds->candidate_ok) if (!ds->candidate_ok)
return SHORT_NAME_AMBIGUOUS; return SHORT_NAME_AMBIGUOUS;
hashcpy(sha1, ds->candidate.hash); oidcpy(oid, &ds->candidate);
return 0; return 0;
} }
@ -385,7 +385,7 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
return 0; return 0;
} }
static int get_short_sha1(const char *name, int len, unsigned char *sha1, static int get_short_oid(const char *name, int len, struct object_id *oid,
unsigned flags) unsigned flags)
{ {
int status; int status;
@ -396,7 +396,7 @@ static int get_short_sha1(const char *name, int len, unsigned char *sha1,
return -1; return -1;
if (HAS_MULTI_BITS(flags & GET_SHA1_DISAMBIGUATORS)) if (HAS_MULTI_BITS(flags & GET_SHA1_DISAMBIGUATORS))
die("BUG: multiple get_short_sha1 disambiguator flags"); die("BUG: multiple get_short_oid disambiguator flags");
if (flags & GET_SHA1_COMMIT) if (flags & GET_SHA1_COMMIT)
ds.fn = disambiguate_commit_only; ds.fn = disambiguate_commit_only;
@ -413,7 +413,7 @@ static int get_short_sha1(const char *name, int len, unsigned char *sha1,
find_short_object_filename(&ds); find_short_object_filename(&ds);
find_short_packed_object(&ds); find_short_packed_object(&ds);
status = finish_object_disambiguation(&ds, sha1); status = finish_object_disambiguation(&ds, oid);
if (!quietly && (status == SHORT_NAME_AMBIGUOUS)) { if (!quietly && (status == SHORT_NAME_AMBIGUOUS)) {
error(_("short SHA1 %s is ambiguous"), ds.hex_pfx); error(_("short SHA1 %s is ambiguous"), ds.hex_pfx);
@ -504,8 +504,8 @@ int find_unique_abbrev_r(char *hex, const unsigned char *sha1, int len)
return 40; return 40;
exists = has_sha1_file(sha1); exists = has_sha1_file(sha1);
while (len < 40) { while (len < 40) {
unsigned char sha1_ret[20]; struct object_id oid_ret;
status = get_short_sha1(hex, len, sha1_ret, GET_SHA1_QUIETLY); status = get_short_oid(hex, len, &oid_ret, GET_SHA1_QUIETLY);
if (exists if (exists
? !status ? !status
: status == SHORT_NAME_NOT_FOUND) { : status == SHORT_NAME_NOT_FOUND) {
@ -578,10 +578,10 @@ static inline int push_mark(const char *string, int len)
return at_mark(string, len, suffix, ARRAY_SIZE(suffix)); return at_mark(string, len, suffix, ARRAY_SIZE(suffix));
} }
static int get_sha1_1(const char *name, int len, unsigned char *sha1, unsigned lookup_flags); static int get_oid_1(const char *name, int len, struct object_id *oid, unsigned lookup_flags);
static int interpret_nth_prior_checkout(const char *name, int namelen, struct strbuf *buf); static int interpret_nth_prior_checkout(const char *name, int namelen, struct strbuf *buf);
static int get_sha1_basic(const char *str, int len, unsigned char *sha1, static int get_oid_basic(const char *str, int len, struct object_id *oid,
unsigned int flags) unsigned int flags)
{ {
static const char *warn_msg = "refname '%.*s' is ambiguous."; static const char *warn_msg = "refname '%.*s' is ambiguous.";
@ -595,14 +595,14 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1,
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n" "examine these refs and maybe delete them. Turn this message off by\n"
"running \"git config advice.objectNameWarning false\""); "running \"git config advice.objectNameWarning false\"");
unsigned char tmp_sha1[20]; struct object_id tmp_oid;
char *real_ref = NULL; char *real_ref = NULL;
int refs_found = 0; int refs_found = 0;
int at, reflog_len, nth_prior = 0; int at, reflog_len, nth_prior = 0;
if (len == 40 && !get_sha1_hex(str, sha1)) { if (len == GIT_SHA1_HEXSZ && !get_oid_hex(str, oid)) {
if (warn_ambiguous_refs && warn_on_object_refname_ambiguity) { if (warn_ambiguous_refs && warn_on_object_refname_ambiguity) {
refs_found = dwim_ref(str, len, tmp_sha1, &real_ref); refs_found = dwim_ref(str, len, tmp_oid.hash, &real_ref);
if (refs_found > 0) { if (refs_found > 0) {
warning(warn_msg, len, str); warning(warn_msg, len, str);
if (advice_object_name_warning) if (advice_object_name_warning)
@ -644,7 +644,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1,
int detached; int detached;
if (interpret_nth_prior_checkout(str, len, &buf) > 0) { if (interpret_nth_prior_checkout(str, len, &buf) > 0) {
detached = (buf.len == 40 && !get_sha1_hex(buf.buf, sha1)); detached = (buf.len == GIT_SHA1_HEXSZ && !get_oid_hex(buf.buf, oid));
strbuf_release(&buf); strbuf_release(&buf);
if (detached) if (detached)
return 0; return 0;
@ -653,18 +653,18 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1,
if (!len && reflog_len) if (!len && reflog_len)
/* allow "@{...}" to mean the current branch reflog */ /* allow "@{...}" to mean the current branch reflog */
refs_found = dwim_ref("HEAD", 4, sha1, &real_ref); refs_found = dwim_ref("HEAD", 4, oid->hash, &real_ref);
else if (reflog_len) else if (reflog_len)
refs_found = dwim_log(str, len, sha1, &real_ref); refs_found = dwim_log(str, len, oid->hash, &real_ref);
else else
refs_found = dwim_ref(str, len, sha1, &real_ref); refs_found = dwim_ref(str, len, oid->hash, &real_ref);
if (!refs_found) if (!refs_found)
return -1; return -1;
if (warn_ambiguous_refs && !(flags & GET_SHA1_QUIETLY) && if (warn_ambiguous_refs && !(flags & GET_SHA1_QUIETLY) &&
(refs_found > 1 || (refs_found > 1 ||
!get_short_sha1(str, len, tmp_sha1, GET_SHA1_QUIETLY))) !get_short_oid(str, len, &tmp_oid, GET_SHA1_QUIETLY)))
warning(warn_msg, len, str); warning(warn_msg, len, str);
if (reflog_len) { if (reflog_len) {
@ -696,7 +696,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1,
return -1; return -1;
} }
} }
if (read_ref_at(real_ref, flags, at_time, nth, sha1, NULL, if (read_ref_at(real_ref, flags, at_time, nth, oid->hash, NULL,
&co_time, &co_tz, &co_cnt)) { &co_time, &co_tz, &co_cnt)) {
if (!len) { if (!len) {
if (starts_with(real_ref, "refs/heads/")) { if (starts_with(real_ref, "refs/heads/")) {
@ -729,10 +729,10 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1,
} }
static int get_parent(const char *name, int len, static int get_parent(const char *name, int len,
unsigned char *result, int idx) struct object_id *result, int idx)
{ {
struct object_id oid; struct object_id oid;
int ret = get_sha1_1(name, len, oid.hash, GET_SHA1_COMMITTISH); int ret = get_oid_1(name, len, &oid, GET_SHA1_COMMITTISH);
struct commit *commit; struct commit *commit;
struct commit_list *p; struct commit_list *p;
@ -742,13 +742,13 @@ static int get_parent(const char *name, int len,
if (parse_commit(commit)) if (parse_commit(commit))
return -1; return -1;
if (!idx) { if (!idx) {
hashcpy(result, commit->object.oid.hash); oidcpy(result, &commit->object.oid);
return 0; return 0;
} }
p = commit->parents; p = commit->parents;
while (p) { while (p) {
if (!--idx) { if (!--idx) {
hashcpy(result, p->item->object.oid.hash); oidcpy(result, &p->item->object.oid);
return 0; return 0;
} }
p = p->next; p = p->next;
@ -757,13 +757,13 @@ static int get_parent(const char *name, int len,
} }
static int get_nth_ancestor(const char *name, int len, static int get_nth_ancestor(const char *name, int len,
unsigned char *result, int generation) struct object_id *result, int generation)
{ {
struct object_id oid; struct object_id oid;
struct commit *commit; struct commit *commit;
int ret; int ret;
ret = get_sha1_1(name, len, oid.hash, GET_SHA1_COMMITTISH); ret = get_oid_1(name, len, &oid, GET_SHA1_COMMITTISH);
if (ret) if (ret)
return ret; return ret;
commit = lookup_commit_reference(&oid); commit = lookup_commit_reference(&oid);
@ -775,7 +775,7 @@ static int get_nth_ancestor(const char *name, int len,
return -1; return -1;
commit = commit->parents->item; commit = commit->parents->item;
} }
hashcpy(result, commit->object.oid.hash); oidcpy(result, &commit->object.oid);
return 0; return 0;
} }
@ -804,7 +804,7 @@ struct object *peel_to_type(const char *name, int namelen,
} }
} }
static int peel_onion(const char *name, int len, unsigned char *sha1, static int peel_onion(const char *name, int len, struct object_id *oid,
unsigned lookup_flags) unsigned lookup_flags)
{ {
struct object_id outer; struct object_id outer;
@ -855,7 +855,7 @@ static int peel_onion(const char *name, int len, unsigned char *sha1,
else if (expected_type == OBJ_TREE) else if (expected_type == OBJ_TREE)
lookup_flags |= GET_SHA1_TREEISH; lookup_flags |= GET_SHA1_TREEISH;
if (get_sha1_1(name, sp - name - 2, outer.hash, lookup_flags)) if (get_oid_1(name, sp - name - 2, &outer, lookup_flags))
return -1; return -1;
o = parse_object(&outer); o = parse_object(&outer);
@ -865,7 +865,7 @@ static int peel_onion(const char *name, int len, unsigned char *sha1,
o = deref_tag(o, name, sp - name - 2); o = deref_tag(o, name, sp - name - 2);
if (!o || (!o->parsed && !parse_object(&o->oid))) if (!o || (!o->parsed && !parse_object(&o->oid)))
return -1; return -1;
hashcpy(sha1, o->oid.hash); oidcpy(oid, &o->oid);
return 0; return 0;
} }
@ -878,7 +878,7 @@ static int peel_onion(const char *name, int len, unsigned char *sha1,
if (!o) if (!o)
return -1; return -1;
hashcpy(sha1, o->oid.hash); oidcpy(oid, &o->oid);
if (sp[0] == '/') { if (sp[0] == '/') {
/* "$commit^{/foo}" */ /* "$commit^{/foo}" */
char *prefix; char *prefix;
@ -894,14 +894,14 @@ static int peel_onion(const char *name, int len, unsigned char *sha1,
prefix = xstrndup(sp + 1, name + len - 1 - (sp + 1)); prefix = xstrndup(sp + 1, name + len - 1 - (sp + 1));
commit_list_insert((struct commit *)o, &list); commit_list_insert((struct commit *)o, &list);
ret = get_sha1_oneline(prefix, sha1, list); ret = get_oid_oneline(prefix, oid, list);
free(prefix); free(prefix);
return ret; return ret;
} }
return 0; return 0;
} }
static int get_describe_name(const char *name, int len, unsigned char *sha1) static int get_describe_name(const char *name, int len, struct object_id *oid)
{ {
const char *cp; const char *cp;
unsigned flags = GET_SHA1_QUIETLY | GET_SHA1_COMMIT; unsigned flags = GET_SHA1_QUIETLY | GET_SHA1_COMMIT;
@ -915,14 +915,14 @@ static int get_describe_name(const char *name, int len, unsigned char *sha1)
if (ch == 'g' && cp[-1] == '-') { if (ch == 'g' && cp[-1] == '-') {
cp++; cp++;
len -= cp - name; len -= cp - name;
return get_short_sha1(cp, len, sha1, flags); return get_short_oid(cp, len, oid, flags);
} }
} }
} }
return -1; return -1;
} }
static int get_sha1_1(const char *name, int len, unsigned char *sha1, unsigned lookup_flags) static int get_oid_1(const char *name, int len, struct object_id *oid, unsigned lookup_flags)
{ {
int ret, has_suffix; int ret, has_suffix;
const char *cp; const char *cp;
@ -949,25 +949,25 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1, unsigned l
if (!num && len1 == len - 1) if (!num && len1 == len - 1)
num = 1; num = 1;
if (has_suffix == '^') if (has_suffix == '^')
return get_parent(name, len1, sha1, num); return get_parent(name, len1, oid, num);
/* else if (has_suffix == '~') -- goes without saying */ /* else if (has_suffix == '~') -- goes without saying */
return get_nth_ancestor(name, len1, sha1, num); return get_nth_ancestor(name, len1, oid, num);
} }
ret = peel_onion(name, len, sha1, lookup_flags); ret = peel_onion(name, len, oid, lookup_flags);
if (!ret) if (!ret)
return 0; return 0;
ret = get_sha1_basic(name, len, sha1, lookup_flags); ret = get_oid_basic(name, len, oid, lookup_flags);
if (!ret) if (!ret)
return 0; return 0;
/* It could be describe output that is "SOMETHING-gXXXX" */ /* It could be describe output that is "SOMETHING-gXXXX" */
ret = get_describe_name(name, len, sha1); ret = get_describe_name(name, len, oid);
if (!ret) if (!ret)
return 0; return 0;
return get_short_sha1(name, len, sha1, lookup_flags); return get_short_oid(name, len, oid, lookup_flags);
} }
/* /*
@ -1004,7 +1004,7 @@ static int handle_one_ref(const char *path, const struct object_id *oid,
return 0; return 0;
} }
static int get_sha1_oneline(const char *prefix, unsigned char *sha1, static int get_oid_oneline(const char *prefix, struct object_id *oid,
struct commit_list *list) struct commit_list *list)
{ {
struct commit_list *backup = NULL, *l; struct commit_list *backup = NULL, *l;
@ -1044,7 +1044,7 @@ static int get_sha1_oneline(const char *prefix, unsigned char *sha1,
unuse_commit_buffer(commit, buf); unuse_commit_buffer(commit, buf);
if (matches) { if (matches) {
hashcpy(sha1, commit->object.oid.hash); oidcpy(oid, &commit->object.oid);
found = 1; found = 1;
break; break;
} }
@ -1140,7 +1140,7 @@ int get_oid_mb(const char *name, struct object_id *oid)
struct strbuf sb; struct strbuf sb;
strbuf_init(&sb, dots - name); strbuf_init(&sb, dots - name);
strbuf_add(&sb, name, dots - name); strbuf_add(&sb, name, dots - name);
st = get_sha1_committish(sb.buf, oid_tmp.hash); st = get_oid_committish(sb.buf, &oid_tmp);
strbuf_release(&sb); strbuf_release(&sb);
} }
if (st) if (st)
@ -1149,7 +1149,7 @@ int get_oid_mb(const char *name, struct object_id *oid)
if (!one) if (!one)
return -1; return -1;
if (get_sha1_committish(dots[3] ? (dots + 3) : "HEAD", oid_tmp.hash)) if (get_oid_committish(dots[3] ? (dots + 3) : "HEAD", &oid_tmp))
return -1; return -1;
two = lookup_commit_reference_gently(&oid_tmp, 0); two = lookup_commit_reference_gently(&oid_tmp, 0);
if (!two) if (!two)
@ -1338,21 +1338,13 @@ int strbuf_check_branch_ref(struct strbuf *sb, const char *name)
} }
/* /*
* This is like "get_sha1_basic()", except it allows "sha1 expressions", * This is like "get_oid_basic()", except it allows "object ID expressions",
* notably "xyz^" for "parent of xyz" * notably "xyz^" for "parent of xyz"
*/ */
int get_sha1(const char *name, unsigned char *sha1)
{
struct object_context unused;
return get_sha1_with_context(name, 0, sha1, &unused);
}
/*
* This is like "get_sha1()", but for struct object_id.
*/
int get_oid(const char *name, struct object_id *oid) int get_oid(const char *name, struct object_id *oid)
{ {
return get_sha1(name, oid->hash); struct object_context unused;
return get_oid_with_context(name, 0, oid, &unused);
} }
@ -1366,49 +1358,49 @@ int get_oid(const char *name, struct object_id *oid)
* commit-ish. It is merely to give a hint to the disambiguation * commit-ish. It is merely to give a hint to the disambiguation
* machinery. * machinery.
*/ */
int get_sha1_committish(const char *name, unsigned char *sha1) int get_oid_committish(const char *name, struct object_id *oid)
{ {
struct object_context unused; struct object_context unused;
return get_sha1_with_context(name, GET_SHA1_COMMITTISH, return get_oid_with_context(name, GET_SHA1_COMMITTISH,
sha1, &unused); oid, &unused);
} }
int get_sha1_treeish(const char *name, unsigned char *sha1) int get_oid_treeish(const char *name, struct object_id *oid)
{ {
struct object_context unused; struct object_context unused;
return get_sha1_with_context(name, GET_SHA1_TREEISH, return get_oid_with_context(name, GET_SHA1_TREEISH,
sha1, &unused); oid, &unused);
} }
int get_sha1_commit(const char *name, unsigned char *sha1) int get_oid_commit(const char *name, struct object_id *oid)
{ {
struct object_context unused; struct object_context unused;
return get_sha1_with_context(name, GET_SHA1_COMMIT, return get_oid_with_context(name, GET_SHA1_COMMIT,
sha1, &unused); oid, &unused);
} }
int get_sha1_tree(const char *name, unsigned char *sha1) int get_oid_tree(const char *name, struct object_id *oid)
{ {
struct object_context unused; struct object_context unused;
return get_sha1_with_context(name, GET_SHA1_TREE, return get_oid_with_context(name, GET_SHA1_TREE,
sha1, &unused); oid, &unused);
} }
int get_sha1_blob(const char *name, unsigned char *sha1) int get_oid_blob(const char *name, struct object_id *oid)
{ {
struct object_context unused; struct object_context unused;
return get_sha1_with_context(name, GET_SHA1_BLOB, return get_oid_with_context(name, GET_SHA1_BLOB,
sha1, &unused); oid, &unused);
} }
/* Must be called only when object_name:filename doesn't exist. */ /* Must be called only when object_name:filename doesn't exist. */
static void diagnose_invalid_sha1_path(const char *prefix, static void diagnose_invalid_oid_path(const char *prefix,
const char *filename, const char *filename,
const unsigned char *tree_sha1, const struct object_id *tree_oid,
const char *object_name, const char *object_name,
int object_name_len) int object_name_len)
{ {
unsigned char sha1[20]; struct object_id oid;
unsigned mode; unsigned mode;
if (!prefix) if (!prefix)
@ -1420,8 +1412,8 @@ static void diagnose_invalid_sha1_path(const char *prefix,
if (is_missing_file_error(errno)) { if (is_missing_file_error(errno)) {
char *fullname = xstrfmt("%s%s", prefix, filename); char *fullname = xstrfmt("%s%s", prefix, filename);
if (!get_tree_entry(tree_sha1, fullname, if (!get_tree_entry(tree_oid->hash, fullname,
sha1, &mode)) { oid.hash, &mode)) {
die("Path '%s' exists, but not '%s'.\n" die("Path '%s' exists, but not '%s'.\n"
"Did you mean '%.*s:%s' aka '%.*s:./%s'?", "Did you mean '%.*s:%s' aka '%.*s:./%s'?",
fullname, fullname,
@ -1504,11 +1496,11 @@ static char *resolve_relative_path(const char *rel)
rel); rel);
} }
static int get_sha1_with_context_1(const char *name, static int get_oid_with_context_1(const char *name,
unsigned flags, unsigned flags,
const char *prefix, const char *prefix,
unsigned char *sha1, struct object_id *oid,
struct object_context *oc) struct object_context *oc)
{ {
int ret, bracket_depth; int ret, bracket_depth;
int namelen = strlen(name); int namelen = strlen(name);
@ -1521,7 +1513,7 @@ static int get_sha1_with_context_1(const char *name,
memset(oc, 0, sizeof(*oc)); memset(oc, 0, sizeof(*oc));
oc->mode = S_IFINVALID; oc->mode = S_IFINVALID;
strbuf_init(&oc->symlink_path, 0); strbuf_init(&oc->symlink_path, 0);
ret = get_sha1_1(name, namelen, sha1, flags); ret = get_oid_1(name, namelen, oid, flags);
if (!ret) if (!ret)
return ret; return ret;
/* /*
@ -1541,7 +1533,7 @@ static int get_sha1_with_context_1(const char *name,
for_each_ref(handle_one_ref, &list); for_each_ref(handle_one_ref, &list);
commit_list_sort_by_date(&list); commit_list_sort_by_date(&list);
return get_sha1_oneline(name + 2, sha1, list); return get_oid_oneline(name + 2, oid, list);
} }
if (namelen < 3 || if (namelen < 3 ||
name[2] != ':' || name[2] != ':' ||
@ -1573,7 +1565,7 @@ static int get_sha1_with_context_1(const char *name,
memcmp(ce->name, cp, namelen)) memcmp(ce->name, cp, namelen))
break; break;
if (ce_stage(ce) == stage) { if (ce_stage(ce) == stage) {
hashcpy(sha1, ce->oid.hash); oidcpy(oid, &ce->oid);
oc->mode = ce->ce_mode; oc->mode = ce->ce_mode;
free(new_path); free(new_path);
return 0; return 0;
@ -1594,14 +1586,14 @@ static int get_sha1_with_context_1(const char *name,
break; break;
} }
if (*cp == ':') { if (*cp == ':') {
unsigned char tree_sha1[20]; struct object_id tree_oid;
int len = cp - name; int len = cp - name;
unsigned sub_flags = flags; unsigned sub_flags = flags;
sub_flags &= ~GET_SHA1_DISAMBIGUATORS; sub_flags &= ~GET_SHA1_DISAMBIGUATORS;
sub_flags |= GET_SHA1_TREEISH; sub_flags |= GET_SHA1_TREEISH;
if (!get_sha1_1(name, len, tree_sha1, sub_flags)) { if (!get_oid_1(name, len, &tree_oid, sub_flags)) {
const char *filename = cp+1; const char *filename = cp+1;
char *new_filename = NULL; char *new_filename = NULL;
@ -1609,20 +1601,20 @@ static int get_sha1_with_context_1(const char *name,
if (new_filename) if (new_filename)
filename = new_filename; filename = new_filename;
if (flags & GET_SHA1_FOLLOW_SYMLINKS) { if (flags & GET_SHA1_FOLLOW_SYMLINKS) {
ret = get_tree_entry_follow_symlinks(tree_sha1, ret = get_tree_entry_follow_symlinks(tree_oid.hash,
filename, sha1, &oc->symlink_path, filename, oid->hash, &oc->symlink_path,
&oc->mode); &oc->mode);
} else { } else {
ret = get_tree_entry(tree_sha1, filename, ret = get_tree_entry(tree_oid.hash, filename,
sha1, &oc->mode); oid->hash, &oc->mode);
if (ret && only_to_die) { if (ret && only_to_die) {
diagnose_invalid_sha1_path(prefix, diagnose_invalid_oid_path(prefix,
filename, filename,
tree_sha1, &tree_oid,
name, len); name, len);
} }
} }
hashcpy(oc->tree, tree_sha1); hashcpy(oc->tree, tree_oid.hash);
if (flags & GET_SHA1_RECORD_PATH) if (flags & GET_SHA1_RECORD_PATH)
oc->path = xstrdup(filename); oc->path = xstrdup(filename);
@ -1646,13 +1638,13 @@ static int get_sha1_with_context_1(const char *name,
void maybe_die_on_misspelt_object_name(const char *name, const char *prefix) void maybe_die_on_misspelt_object_name(const char *name, const char *prefix)
{ {
struct object_context oc; struct object_context oc;
unsigned char sha1[20]; struct object_id oid;
get_sha1_with_context_1(name, GET_SHA1_ONLY_TO_DIE, prefix, sha1, &oc); get_oid_with_context_1(name, GET_SHA1_ONLY_TO_DIE, prefix, &oid, &oc);
} }
int get_sha1_with_context(const char *str, unsigned flags, unsigned char *sha1, struct object_context *oc) int get_oid_with_context(const char *str, unsigned flags, struct object_id *oid, struct object_context *oc)
{ {
if (flags & GET_SHA1_FOLLOW_SYMLINKS && flags & GET_SHA1_ONLY_TO_DIE) if (flags & GET_SHA1_FOLLOW_SYMLINKS && flags & GET_SHA1_ONLY_TO_DIE)
die("BUG: incompatible flags for get_sha1_with_context"); die("BUG: incompatible flags for get_sha1_with_context");
return get_sha1_with_context_1(str, flags, NULL, sha1, oc); return get_oid_with_context_1(str, flags, NULL, oid, oc);
} }

View File

@ -927,7 +927,7 @@ static int push_refs_with_export(struct transport *transport,
struct object_id oid; struct object_id oid;
private = apply_refspecs(data->refspecs, data->refspec_nr, ref->name); private = apply_refspecs(data->refspecs, data->refspec_nr, ref->name);
if (private && !get_sha1(private, oid.hash)) { if (private && !get_oid(private, &oid)) {
strbuf_addf(&buf, "^%s", private); strbuf_addf(&buf, "^%s", private);
string_list_append(&revlist_args, strbuf_detach(&buf, NULL)); string_list_append(&revlist_args, strbuf_detach(&buf, NULL));
oidcpy(&ref->old_oid, &oid); oidcpy(&ref->old_oid, &oid);