11
11
static void process_blob (struct rev_info * revs ,
12
12
struct blob * blob ,
13
13
show_object_fn show ,
14
- struct name_path * path ,
14
+ struct strbuf * path ,
15
15
const char * name ,
16
16
void * cb_data )
17
17
{
18
18
struct object * obj = & blob -> object ;
19
+ size_t pathlen ;
19
20
20
21
if (!revs -> blob_objects )
21
22
return ;
@@ -24,7 +25,11 @@ static void process_blob(struct rev_info *revs,
24
25
if (obj -> flags & (UNINTERESTING | SEEN ))
25
26
return ;
26
27
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 );
28
33
}
29
34
30
35
/*
@@ -52,7 +57,7 @@ static void process_blob(struct rev_info *revs,
52
57
static void process_gitlink (struct rev_info * revs ,
53
58
const unsigned char * sha1 ,
54
59
show_object_fn show ,
55
- struct name_path * path ,
60
+ struct strbuf * path ,
56
61
const char * name ,
57
62
void * cb_data )
58
63
{
@@ -62,15 +67,13 @@ static void process_gitlink(struct rev_info *revs,
62
67
static void process_tree (struct rev_info * revs ,
63
68
struct tree * tree ,
64
69
show_object_fn show ,
65
- struct name_path * path ,
66
70
struct strbuf * base ,
67
71
const char * name ,
68
72
void * cb_data )
69
73
{
70
74
struct object * obj = & tree -> object ;
71
75
struct tree_desc desc ;
72
76
struct name_entry entry ;
73
- struct name_path me ;
74
77
enum interesting match = revs -> diffopt .pathspec .nr == 0 ?
75
78
all_entries_interesting : entry_not_interesting ;
76
79
int baselen = base -> len ;
@@ -86,17 +89,12 @@ static void process_tree(struct rev_info *revs,
86
89
return ;
87
90
die ("bad tree object %s" , oid_to_hex (& obj -> oid ));
88
91
}
92
+
89
93
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 , '/' );
100
98
101
99
init_tree_desc (& desc , tree -> buffer , tree -> size );
102
100
@@ -113,16 +111,16 @@ static void process_tree(struct rev_info *revs,
113
111
if (S_ISDIR (entry .mode ))
114
112
process_tree (revs ,
115
113
lookup_tree (entry .sha1 ),
116
- show , & me , base , entry .path ,
114
+ show , base , entry .path ,
117
115
cb_data );
118
116
else if (S_ISGITLINK (entry .mode ))
119
117
process_gitlink (revs , entry .sha1 ,
120
- show , & me , entry .path ,
118
+ show , base , entry .path ,
121
119
cb_data );
122
120
else
123
121
process_blob (revs ,
124
122
lookup_blob (entry .sha1 ),
125
- show , & me , entry .path ,
123
+ show , base , entry .path ,
126
124
cb_data );
127
125
}
128
126
strbuf_setlen (base , baselen );
@@ -213,19 +211,19 @@ void traverse_commit_list(struct rev_info *revs,
213
211
continue ;
214
212
if (obj -> type == OBJ_TAG ) {
215
213
obj -> flags |= SEEN ;
216
- show_object (obj , NULL , name , data );
214
+ show_object (obj , name , data );
217
215
continue ;
218
216
}
219
217
if (!path )
220
218
path = "" ;
221
219
if (obj -> type == OBJ_TREE ) {
222
220
process_tree (revs , (struct tree * )obj , show_object ,
223
- NULL , & base , path , data );
221
+ & base , path , data );
224
222
continue ;
225
223
}
226
224
if (obj -> type == OBJ_BLOB ) {
227
225
process_blob (revs , (struct blob * )obj , show_object ,
228
- NULL , path , data );
226
+ & base , path , data );
229
227
continue ;
230
228
}
231
229
die ("unknown pending object %s (%s)" ,
0 commit comments