http-push: stop using name_path
The graph traversal code here passes along a name_path to build up the pathname at which we find each blob. But we never actually do anything with the resulting names, making it a waste of code and memory. This usage came inaa1dbc9
(Update http-push functionality, 2006-03-07), and originally the result was passed to "add_object" (which stored it, but didn't really use it, either). But we stopped using that function in1f1e895
(Add "named object array" concept, 2006-06-19) in favor of storing just the objects themselves. Moreover, the generation of the name in process_tree() is buggy. It sticks "name" onto the end of the name_path linked list, and then passes it down again as it recurses (instead of "entry.path"). So it's a good thing this was unused, as the resulting path for "a/b/c/d" would end up as "a/a/a/a". Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
d770187872
commit
c6bd2a1dec
23
http-push.c
23
http-push.c
@ -1276,9 +1276,7 @@ static struct object_list **add_one_object(struct object *obj, struct object_lis
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct object_list **process_blob(struct blob *blob,
|
static struct object_list **process_blob(struct blob *blob,
|
||||||
struct object_list **p,
|
struct object_list **p)
|
||||||
struct name_path *path,
|
|
||||||
const char *name)
|
|
||||||
{
|
{
|
||||||
struct object *obj = &blob->object;
|
struct object *obj = &blob->object;
|
||||||
|
|
||||||
@ -1292,14 +1290,11 @@ static struct object_list **process_blob(struct blob *blob,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct object_list **process_tree(struct tree *tree,
|
static struct object_list **process_tree(struct tree *tree,
|
||||||
struct object_list **p,
|
struct object_list **p)
|
||||||
struct name_path *path,
|
|
||||||
const char *name)
|
|
||||||
{
|
{
|
||||||
struct object *obj = &tree->object;
|
struct object *obj = &tree->object;
|
||||||
struct tree_desc desc;
|
struct tree_desc desc;
|
||||||
struct name_entry entry;
|
struct name_entry entry;
|
||||||
struct name_path me;
|
|
||||||
|
|
||||||
obj->flags |= LOCAL;
|
obj->flags |= LOCAL;
|
||||||
|
|
||||||
@ -1309,21 +1304,17 @@ static struct object_list **process_tree(struct tree *tree,
|
|||||||
die("bad tree object %s", sha1_to_hex(obj->sha1));
|
die("bad tree object %s", sha1_to_hex(obj->sha1));
|
||||||
|
|
||||||
obj->flags |= SEEN;
|
obj->flags |= SEEN;
|
||||||
name = xstrdup(name);
|
|
||||||
p = add_one_object(obj, p);
|
p = add_one_object(obj, p);
|
||||||
me.up = path;
|
|
||||||
me.elem = name;
|
|
||||||
me.elem_len = strlen(name);
|
|
||||||
|
|
||||||
init_tree_desc(&desc, tree->buffer, tree->size);
|
init_tree_desc(&desc, tree->buffer, tree->size);
|
||||||
|
|
||||||
while (tree_entry(&desc, &entry))
|
while (tree_entry(&desc, &entry))
|
||||||
switch (object_type(entry.mode)) {
|
switch (object_type(entry.mode)) {
|
||||||
case OBJ_TREE:
|
case OBJ_TREE:
|
||||||
p = process_tree(lookup_tree(entry.sha1), p, &me, name);
|
p = process_tree(lookup_tree(entry.sha1), p);
|
||||||
break;
|
break;
|
||||||
case OBJ_BLOB:
|
case OBJ_BLOB:
|
||||||
p = process_blob(lookup_blob(entry.sha1), p, &me, name);
|
p = process_blob(lookup_blob(entry.sha1), p);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* Subproject commit - not in this repository */
|
/* Subproject commit - not in this repository */
|
||||||
@ -1342,7 +1333,7 @@ static int get_delta(struct rev_info *revs, struct remote_lock *lock)
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
while ((commit = get_revision(revs)) != NULL) {
|
while ((commit = get_revision(revs)) != NULL) {
|
||||||
p = process_tree(commit->tree, p, NULL, "");
|
p = process_tree(commit->tree, p);
|
||||||
commit->object.flags |= LOCAL;
|
commit->object.flags |= LOCAL;
|
||||||
if (!(commit->object.flags & UNINTERESTING))
|
if (!(commit->object.flags & UNINTERESTING))
|
||||||
count += add_send_request(&commit->object, lock);
|
count += add_send_request(&commit->object, lock);
|
||||||
@ -1361,11 +1352,11 @@ static int get_delta(struct rev_info *revs, struct remote_lock *lock)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (obj->type == OBJ_TREE) {
|
if (obj->type == OBJ_TREE) {
|
||||||
p = process_tree((struct tree *)obj, p, NULL, name);
|
p = process_tree((struct tree *)obj, p);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (obj->type == OBJ_BLOB) {
|
if (obj->type == OBJ_BLOB) {
|
||||||
p = process_blob((struct blob *)obj, p, NULL, name);
|
p = process_blob((struct blob *)obj, p);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
die("unknown pending object %s (%s)", sha1_to_hex(obj->sha1), name);
|
die("unknown pending object %s (%s)", sha1_to_hex(obj->sha1), name);
|
||||||
|
Reference in New Issue
Block a user