1111static void process_blob (struct rev_info * revs ,
1212 struct blob * blob ,
1313 show_object_fn show ,
14- struct name_path * path ,
14+ struct strbuf * path ,
1515 const char * name ,
1616 void * cb_data )
1717{
1818 struct object * obj = & blob -> object ;
19+ size_t pathlen ;
1920
2021 if (!revs -> blob_objects )
2122 return ;
@@ -24,7 +25,11 @@ static void process_blob(struct rev_info *revs,
2425 if (obj -> flags & (UNINTERESTING | SEEN ))
2526 return ;
2627 obj -> flags |= SEEN ;
27- show (obj , path , name , cb_data );
28+
29+ pathlen = path -> len ;
30+ strbuf_addstr (path , name );
31+ show (obj , path -> buf , cb_data );
32+ strbuf_setlen (path , pathlen );
2833}
2934
3035/*
@@ -52,7 +57,7 @@ static void process_blob(struct rev_info *revs,
5257static void process_gitlink (struct rev_info * revs ,
5358 const unsigned char * sha1 ,
5459 show_object_fn show ,
55- struct name_path * path ,
60+ struct strbuf * path ,
5661 const char * name ,
5762 void * cb_data )
5863{
@@ -62,15 +67,13 @@ static void process_gitlink(struct rev_info *revs,
6267static void process_tree (struct rev_info * revs ,
6368 struct tree * tree ,
6469 show_object_fn show ,
65- struct name_path * path ,
6670 struct strbuf * base ,
6771 const char * name ,
6872 void * cb_data )
6973{
7074 struct object * obj = & tree -> object ;
7175 struct tree_desc desc ;
7276 struct name_entry entry ;
73- struct name_path me ;
7477 enum interesting match = revs -> diffopt .pathspec .nr == 0 ?
7578 all_entries_interesting : entry_not_interesting ;
7679 int baselen = base -> len ;
@@ -86,17 +89,12 @@ static void process_tree(struct rev_info *revs,
8689 return ;
8790 die ("bad tree object %s" , sha1_to_hex (obj -> sha1 ));
8891 }
92+
8993 obj -> flags |= SEEN ;
90- show (obj , path , name , cb_data );
91- me .up = path ;
92- me .elem = name ;
93- me .elem_len = strlen (name );
94-
95- if (!match ) {
96- strbuf_addstr (base , name );
97- if (base -> len )
98- strbuf_addch (base , '/' );
99- }
94+ strbuf_addstr (base , name );
95+ show (obj , base -> buf , cb_data );
96+ if (base -> len )
97+ strbuf_addch (base , '/' );
10098
10199 init_tree_desc (& desc , tree -> buffer , tree -> size );
102100
@@ -113,16 +111,16 @@ static void process_tree(struct rev_info *revs,
113111 if (S_ISDIR (entry .mode ))
114112 process_tree (revs ,
115113 lookup_tree (entry .sha1 ),
116- show , & me , base , entry .path ,
114+ show , base , entry .path ,
117115 cb_data );
118116 else if (S_ISGITLINK (entry .mode ))
119117 process_gitlink (revs , entry .sha1 ,
120- show , & me , entry .path ,
118+ show , base , entry .path ,
121119 cb_data );
122120 else
123121 process_blob (revs ,
124122 lookup_blob (entry .sha1 ),
125- show , & me , entry .path ,
123+ show , base , entry .path ,
126124 cb_data );
127125 }
128126 strbuf_setlen (base , baselen );
@@ -213,19 +211,19 @@ void traverse_commit_list(struct rev_info *revs,
213211 continue ;
214212 if (obj -> type == OBJ_TAG ) {
215213 obj -> flags |= SEEN ;
216- show_object (obj , NULL , name , data );
214+ show_object (obj , name , data );
217215 continue ;
218216 }
219217 if (!path )
220218 path = "" ;
221219 if (obj -> type == OBJ_TREE ) {
222220 process_tree (revs , (struct tree * )obj , show_object ,
223- NULL , & base , path , data );
221+ & base , path , data );
224222 continue ;
225223 }
226224 if (obj -> type == OBJ_BLOB ) {
227225 process_blob (revs , (struct blob * )obj , show_object ,
228- NULL , path , data );
226+ & base , path , data );
229227 continue ;
230228 }
231229 die ("unknown pending object %s (%s)" ,
0 commit comments