@@ -90,7 +90,8 @@ static struct blame_origin *get_origin(struct commit *commit, const char *path)
90
90
91
91
92
92
93
- static void verify_working_tree_path (struct commit * work_tree , const char * path )
93
+ static void verify_working_tree_path (struct repository * repo ,
94
+ struct commit * work_tree , const char * path )
94
95
{
95
96
struct commit_list * parents ;
96
97
int pos ;
@@ -101,15 +102,15 @@ static void verify_working_tree_path(struct commit *work_tree, const char *path)
101
102
unsigned mode ;
102
103
103
104
if (!get_tree_entry (commit_oid , path , & blob_oid , & mode ) &&
104
- oid_object_info (the_repository , & blob_oid , NULL ) == OBJ_BLOB )
105
+ oid_object_info (repo , & blob_oid , NULL ) == OBJ_BLOB )
105
106
return ;
106
107
}
107
108
108
- pos = cache_name_pos ( path , strlen (path ));
109
+ pos = index_name_pos ( repo -> index , path , strlen (path ));
109
110
if (pos >= 0 )
110
111
; /* path is in the index */
111
- else if (-1 - pos < active_nr &&
112
- !strcmp (active_cache [-1 - pos ]-> name , path ))
112
+ else if (-1 - pos < repo -> index -> cache_nr &&
113
+ !strcmp (repo -> index -> cache [-1 - pos ]-> name , path ))
113
114
; /* path is in the index, unmerged */
114
115
else
115
116
die ("no such path '%s' in HEAD" , path );
@@ -165,7 +166,8 @@ static void set_commit_buffer_from_strbuf(struct commit *c, struct strbuf *sb)
165
166
* Prepare a dummy commit that represents the work tree (or staged) item.
166
167
* Note that annotating work tree item never works in the reverse.
167
168
*/
168
- static struct commit * fake_working_tree_commit (struct diff_options * opt ,
169
+ static struct commit * fake_working_tree_commit (struct repository * repo ,
170
+ struct diff_options * opt ,
169
171
const char * path ,
170
172
const char * contents_from )
171
173
{
@@ -181,7 +183,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
181
183
unsigned mode ;
182
184
struct strbuf msg = STRBUF_INIT ;
183
185
184
- read_cache ( );
186
+ read_index ( repo -> index );
185
187
time (& now );
186
188
commit = alloc_commit_node (the_repository );
187
189
commit -> object .parsed = 1 ;
@@ -193,7 +195,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
193
195
194
196
parent_tail = append_parent (parent_tail , & head_oid );
195
197
append_merge_parents (parent_tail );
196
- verify_working_tree_path (commit , path );
198
+ verify_working_tree_path (repo , commit , path );
197
199
198
200
origin = make_origin (commit , path );
199
201
@@ -251,7 +253,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
251
253
if (strbuf_read (& buf , 0 , 0 ) < 0 )
252
254
die_errno ("failed to read from stdin" );
253
255
}
254
- convert_to_git (& the_index , path , buf .buf , buf .len , & buf , 0 );
256
+ convert_to_git (repo -> index , path , buf .buf , buf .len , & buf , 0 );
255
257
origin -> file .ptr = buf .buf ;
256
258
origin -> file .size = buf .len ;
257
259
pretend_object_file (buf .buf , buf .len , OBJ_BLOB , & origin -> blob_oid );
@@ -262,27 +264,28 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
262
264
* bits; we are not going to write this index out -- we just
263
265
* want to run "diff-index --cached".
264
266
*/
265
- discard_cache ( );
266
- read_cache ( );
267
+ discard_index ( repo -> index );
268
+ read_index ( repo -> index );
267
269
268
270
len = strlen (path );
269
271
if (!mode ) {
270
- int pos = cache_name_pos ( path , len );
272
+ int pos = index_name_pos ( repo -> index , path , len );
271
273
if (0 <= pos )
272
- mode = active_cache [pos ]-> ce_mode ;
274
+ mode = repo -> index -> cache [pos ]-> ce_mode ;
273
275
else
274
276
/* Let's not bother reading from HEAD tree */
275
277
mode = S_IFREG | 0644 ;
276
278
}
277
- ce = make_empty_cache_entry (& the_index , len );
279
+ ce = make_empty_cache_entry (repo -> index , len );
278
280
oidcpy (& ce -> oid , & origin -> blob_oid );
279
281
memcpy (ce -> name , path , len );
280
282
ce -> ce_flags = create_ce_flags (0 );
281
283
ce -> ce_namelen = len ;
282
284
ce -> ce_mode = create_ce_mode (mode );
283
- add_cache_entry (ce , ADD_CACHE_OK_TO_ADD |ADD_CACHE_OK_TO_REPLACE );
285
+ add_index_entry (repo -> index , ce ,
286
+ ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE );
284
287
285
- cache_tree_invalidate_path (& the_index , path );
288
+ cache_tree_invalidate_path (repo -> index , path );
286
289
287
290
return commit ;
288
291
}
@@ -519,13 +522,14 @@ static void queue_blames(struct blame_scoreboard *sb, struct blame_origin *porig
519
522
*
520
523
* This also fills origin->mode for corresponding tree path.
521
524
*/
522
- static int fill_blob_sha1_and_mode (struct blame_origin * origin )
525
+ static int fill_blob_sha1_and_mode (struct repository * repo ,
526
+ struct blame_origin * origin )
523
527
{
524
528
if (!is_null_oid (& origin -> blob_oid ))
525
529
return 0 ;
526
530
if (get_tree_entry (& origin -> commit -> object .oid , origin -> path , & origin -> blob_oid , & origin -> mode ))
527
531
goto error_out ;
528
- if (oid_object_info (the_repository , & origin -> blob_oid , NULL ) != OBJ_BLOB )
532
+ if (oid_object_info (repo , & origin -> blob_oid , NULL ) != OBJ_BLOB )
529
533
goto error_out ;
530
534
return 0 ;
531
535
error_out :
@@ -1767,7 +1771,9 @@ void init_scoreboard(struct blame_scoreboard *sb)
1767
1771
sb -> copy_score = BLAME_DEFAULT_COPY_SCORE ;
1768
1772
}
1769
1773
1770
- void setup_scoreboard (struct blame_scoreboard * sb , const char * path , struct blame_origin * * orig )
1774
+ void setup_scoreboard (struct blame_scoreboard * sb ,
1775
+ const char * path ,
1776
+ struct blame_origin * * orig )
1771
1777
{
1772
1778
const char * final_commit_name = NULL ;
1773
1779
struct blame_origin * o ;
@@ -1779,6 +1785,9 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
1779
1785
if (sb -> reverse && sb -> contents_from )
1780
1786
die (_ ("--contents and --reverse do not blend well." ));
1781
1787
1788
+ if (!sb -> repo )
1789
+ BUG ("repo is NULL" );
1790
+
1782
1791
if (!sb -> reverse ) {
1783
1792
sb -> final = find_single_final (sb -> revs , & final_commit_name );
1784
1793
sb -> commits .compare = compare_commits_by_commit_date ;
@@ -1800,7 +1809,8 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
1800
1809
* or "--contents".
1801
1810
*/
1802
1811
setup_work_tree ();
1803
- sb -> final = fake_working_tree_commit (& sb -> revs -> diffopt ,
1812
+ sb -> final = fake_working_tree_commit (sb -> repo ,
1813
+ & sb -> revs -> diffopt ,
1804
1814
path , sb -> contents_from );
1805
1815
add_pending_object (sb -> revs , & (sb -> final -> object ), ":" );
1806
1816
}
@@ -1845,7 +1855,7 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
1845
1855
}
1846
1856
else {
1847
1857
o = get_origin (sb -> final , path );
1848
- if (fill_blob_sha1_and_mode (o ))
1858
+ if (fill_blob_sha1_and_mode (sb -> repo , o ))
1849
1859
die (_ ("no such path %s in %s" ), path , final_commit_name );
1850
1860
1851
1861
if (sb -> revs -> diffopt .flags .allow_textconv &&
0 commit comments