242
return 0;
243
}
244
245
+static int disambiguate_tree_only(const unsigned char *sha1, void *cb_data_unused)
246
+{
247
+ int kind = sha1_object_info(sha1, NULL);
248
+ return kind == OBJ_TREE;
249
+}
250
+
251
+static int disambiguate_treeish_only(const unsigned char *sha1, void *cb_data_unused)
252
+{
253
+ struct object *obj;
254
+ int kind;
255
+
256
+ kind = sha1_object_info(sha1, NULL);
257
+ if (kind == OBJ_TREE || kind == OBJ_COMMIT)
258
+ return 1;
259
+ if (kind != OBJ_TAG)
260
+ return 0;
261
+
262
+ /* We need to do this the hard way... */
263
+ obj = deref_tag(lookup_object(sha1), NULL, 0);
264
+ if (obj && (obj->type == OBJ_TREE || obj->type == OBJ_COMMIT))
265
+ return 1;
266
+ return 0;
267
+}
268
+
269
+static int disambiguate_blob_only(const unsigned char *sha1, void *cb_data_unused)
270
+{
271
+ int kind = sha1_object_info(sha1, NULL);
272
+ return kind == OBJ_BLOB;
273
+}
274
+
275
static int get_short_sha1(const char *name, int len, unsigned char *sha1,
276
unsigned flags)
277
{
311
ds.fn = disambiguate_commit_only;
312
else if (flags & GET_SHA1_COMMITTISH)
313
ds.fn = disambiguate_committish_only;
314
+ else if (flags & GET_SHA1_TREE)
315
+ ds.fn = disambiguate_tree_only;
316
+ else if (flags & GET_SHA1_TREEISH)
317
+ ds.fn = disambiguate_treeish_only;
318
+ else if (flags & GET_SHA1_BLOB)
319
+ ds.fn = disambiguate_blob_only;
320
321
find_short_object_filename(len, hex_pfx, &ds);
322
find_short_packed_object(len, bin_pfx, &ds);
1052
sha1, &unused);
1053
}
1054
1055
+int get_sha1_treeish(const char *name, unsigned char *sha1)
1056
+{
1057
+ struct object_context unused;
1058
+ return get_sha1_with_context(name, GET_SHA1_TREEISH,
1059
+ sha1, &unused);
1060
+}
1061
+
1062
+int get_sha1_commit(const char *name, unsigned char *sha1)
1063
+{
1064
+ struct object_context unused;
1065
+ return get_sha1_with_context(name, GET_SHA1_COMMIT,
1066
+ sha1, &unused);
1067
+}
1068
+
1069
+int get_sha1_tree(const char *name, unsigned char *sha1)
1070
+{
1071
+ struct object_context unused;
1072
+ return get_sha1_with_context(name, GET_SHA1_TREE,
1073
+ sha1, &unused);
1074
+}
1075
+
1076
+int get_sha1_blob(const char *name, unsigned char *sha1)
1077
+{
1078
+ struct object_context unused;
1079
+ return get_sha1_with_context(name, GET_SHA1_BLOB,
1080
+ sha1, &unused);
1081
+}
1082
+
1083
/* Must be called only when object_name:filename doesn't exist. */
1084
static void diagnose_invalid_sha1_path(const char *prefix,
1085
const char *filename,
1285
strncpy(object_name, name, cp-name);
1286
object_name[cp-name] = '\0';
1287
}
1224
- if (!get_sha1_1(name, cp-name, tree_sha1, 0)) {
1288
+ if (!get_sha1_1(name, cp-name, tree_sha1, GET_SHA1_TREEISH)) {
1289
const char *filename = cp+1;
1290
char *new_filename = NULL;
1291