@@ -1389,15 +1389,58 @@ static void fix_unresolved_deltas(struct sha1file *f)
1389
1389
free (sorted_by_pos );
1390
1390
}
1391
1391
1392
+ static const char * derive_filename (const char * pack_name , const char * suffix ,
1393
+ struct strbuf * buf )
1394
+ {
1395
+ size_t len ;
1396
+ if (!strip_suffix (pack_name , ".pack" , & len ))
1397
+ die (_ ("packfile name '%s' does not end with '.pack'" ),
1398
+ pack_name );
1399
+ strbuf_add (buf , pack_name , len );
1400
+ strbuf_addch (buf , '.' );
1401
+ strbuf_addstr (buf , suffix );
1402
+ return buf -> buf ;
1403
+ }
1404
+
1405
+ static void write_special_file (const char * suffix , const char * msg ,
1406
+ const char * pack_name , const unsigned char * sha1 ,
1407
+ const char * * report )
1408
+ {
1409
+ struct strbuf name_buf = STRBUF_INIT ;
1410
+ const char * filename ;
1411
+ int fd ;
1412
+ int msg_len = strlen (msg );
1413
+
1414
+ if (pack_name )
1415
+ filename = derive_filename (pack_name , suffix , & name_buf );
1416
+ else
1417
+ filename = odb_pack_name (& name_buf , sha1 , suffix );
1418
+
1419
+ fd = odb_pack_keep (filename );
1420
+ if (fd < 0 ) {
1421
+ if (errno != EEXIST )
1422
+ die_errno (_ ("cannot write %s file '%s'" ),
1423
+ suffix , filename );
1424
+ } else {
1425
+ if (msg_len > 0 ) {
1426
+ write_or_die (fd , msg , msg_len );
1427
+ write_or_die (fd , "\n" , 1 );
1428
+ }
1429
+ if (close (fd ) != 0 )
1430
+ die_errno (_ ("cannot close written %s file '%s'" ),
1431
+ suffix , filename );
1432
+ * report = suffix ;
1433
+ }
1434
+ strbuf_release (& name_buf );
1435
+ }
1436
+
1392
1437
static void final (const char * final_pack_name , const char * curr_pack_name ,
1393
1438
const char * final_index_name , const char * curr_index_name ,
1394
- const char * keep_name , const char * keep_msg ,
1395
- unsigned char * sha1 )
1439
+ const char * keep_msg , unsigned char * sha1 )
1396
1440
{
1397
1441
const char * report = "pack" ;
1398
1442
struct strbuf pack_name = STRBUF_INIT ;
1399
1443
struct strbuf index_name = STRBUF_INIT ;
1400
- struct strbuf keep_name_buf = STRBUF_INIT ;
1401
1444
int err ;
1402
1445
1403
1446
if (!from_stdin ) {
@@ -1409,28 +1452,9 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
1409
1452
die_errno (_ ("error while closing pack file" ));
1410
1453
}
1411
1454
1412
- if (keep_msg ) {
1413
- int keep_fd , keep_msg_len = strlen (keep_msg );
1414
-
1415
- if (!keep_name )
1416
- keep_name = odb_pack_name (& keep_name_buf , sha1 , "keep" );
1417
-
1418
- keep_fd = odb_pack_keep (keep_name );
1419
- if (keep_fd < 0 ) {
1420
- if (errno != EEXIST )
1421
- die_errno (_ ("cannot write keep file '%s'" ),
1422
- keep_name );
1423
- } else {
1424
- if (keep_msg_len > 0 ) {
1425
- write_or_die (keep_fd , keep_msg , keep_msg_len );
1426
- write_or_die (keep_fd , "\n" , 1 );
1427
- }
1428
- if (close (keep_fd ) != 0 )
1429
- die_errno (_ ("cannot close written keep file '%s'" ),
1430
- keep_name );
1431
- report = "keep" ;
1432
- }
1433
- }
1455
+ if (keep_msg )
1456
+ write_special_file ("keep" , keep_msg , final_pack_name , sha1 ,
1457
+ & report );
1434
1458
1435
1459
if (final_pack_name != curr_pack_name ) {
1436
1460
if (!final_pack_name )
@@ -1472,7 +1496,6 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
1472
1496
1473
1497
strbuf_release (& index_name );
1474
1498
strbuf_release (& pack_name );
1475
- strbuf_release (& keep_name_buf );
1476
1499
}
1477
1500
1478
1501
static int git_index_pack_config (const char * k , const char * v , void * cb )
@@ -1615,26 +1638,13 @@ static void show_pack_info(int stat_only)
1615
1638
}
1616
1639
}
1617
1640
1618
- static const char * derive_filename (const char * pack_name , const char * suffix ,
1619
- struct strbuf * buf )
1620
- {
1621
- size_t len ;
1622
- if (!strip_suffix (pack_name , ".pack" , & len ))
1623
- die (_ ("packfile name '%s' does not end with '.pack'" ),
1624
- pack_name );
1625
- strbuf_add (buf , pack_name , len );
1626
- strbuf_addstr (buf , suffix );
1627
- return buf -> buf ;
1628
- }
1629
-
1630
1641
int cmd_index_pack (int argc , const char * * argv , const char * prefix )
1631
1642
{
1632
1643
int i , fix_thin_pack = 0 , verify = 0 , stat_only = 0 ;
1633
1644
const char * curr_index ;
1634
1645
const char * index_name = NULL , * pack_name = NULL ;
1635
- const char * keep_name = NULL , * keep_msg = NULL ;
1636
- struct strbuf index_name_buf = STRBUF_INIT ,
1637
- keep_name_buf = STRBUF_INIT ;
1646
+ const char * keep_msg = NULL ;
1647
+ struct strbuf index_name_buf = STRBUF_INIT ;
1638
1648
struct pack_idx_entry * * idx_objects ;
1639
1649
struct pack_idx_option opts ;
1640
1650
unsigned char pack_sha1 [20 ];
@@ -1745,9 +1755,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
1745
1755
if (from_stdin && !startup_info -> have_repository )
1746
1756
die (_ ("--stdin requires a git repository" ));
1747
1757
if (!index_name && pack_name )
1748
- index_name = derive_filename (pack_name , ".idx" , & index_name_buf );
1749
- if (keep_msg && !keep_name && pack_name )
1750
- keep_name = derive_filename (pack_name , ".keep" , & keep_name_buf );
1758
+ index_name = derive_filename (pack_name , "idx" , & index_name_buf );
1751
1759
1752
1760
if (verify ) {
1753
1761
if (!index_name )
@@ -1795,13 +1803,12 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
1795
1803
if (!verify )
1796
1804
final (pack_name , curr_pack ,
1797
1805
index_name , curr_index ,
1798
- keep_name , keep_msg ,
1806
+ keep_msg ,
1799
1807
pack_sha1 );
1800
1808
else
1801
1809
close (input_fd );
1802
1810
free (objects );
1803
1811
strbuf_release (& index_name_buf );
1804
- strbuf_release (& keep_name_buf );
1805
1812
if (pack_name == NULL )
1806
1813
free ((void * ) curr_pack );
1807
1814
if (index_name == NULL )
0 commit comments