@@ -12,74 +12,6 @@ static const char * const rerere_usage[] = {
1212 NULL ,
1313};
1414
15- /* these values are days */
16- static int cutoff_noresolve = 15 ;
17- static int cutoff_resolve = 60 ;
18-
19- static time_t rerere_created_at (const char * name )
20- {
21- struct stat st ;
22- return stat (rerere_path (name , "preimage" ), & st ) ? (time_t ) 0 : st .st_mtime ;
23- }
24-
25- static time_t rerere_last_used_at (const char * name )
26- {
27- struct stat st ;
28- return stat (rerere_path (name , "postimage" ), & st ) ? (time_t ) 0 : st .st_mtime ;
29- }
30-
31- static void unlink_rr_item (const char * name )
32- {
33- unlink (rerere_path (name , "thisimage" ));
34- unlink (rerere_path (name , "preimage" ));
35- unlink (rerere_path (name , "postimage" ));
36- rmdir (git_path ("rr-cache/%s" , name ));
37- }
38-
39- static int git_rerere_gc_config (const char * var , const char * value , void * cb )
40- {
41- if (!strcmp (var , "gc.rerereresolved" ))
42- cutoff_resolve = git_config_int (var , value );
43- else if (!strcmp (var , "gc.rerereunresolved" ))
44- cutoff_noresolve = git_config_int (var , value );
45- else
46- return git_default_config (var , value , cb );
47- return 0 ;
48- }
49-
50- static void garbage_collect (struct string_list * rr )
51- {
52- struct string_list to_remove = STRING_LIST_INIT_DUP ;
53- DIR * dir ;
54- struct dirent * e ;
55- int i , cutoff ;
56- time_t now = time (NULL ), then ;
57-
58- git_config (git_rerere_gc_config , NULL );
59- dir = opendir (git_path ("rr-cache" ));
60- if (!dir )
61- die_errno ("unable to open rr-cache directory" );
62- while ((e = readdir (dir ))) {
63- if (is_dot_or_dotdot (e -> d_name ))
64- continue ;
65-
66- then = rerere_last_used_at (e -> d_name );
67- if (then ) {
68- cutoff = cutoff_resolve ;
69- } else {
70- then = rerere_created_at (e -> d_name );
71- if (!then )
72- continue ;
73- cutoff = cutoff_noresolve ;
74- }
75- if (then < now - cutoff * 86400 )
76- string_list_append (& to_remove , e -> d_name );
77- }
78- for (i = 0 ; i < to_remove .nr ; i ++ )
79- unlink_rr_item (to_remove .items [i ].string );
80- string_list_clear (& to_remove , 0 );
81- }
82-
8315static int outf (void * dummy , mmbuffer_t * ptr , int nbuf )
8416{
8517 int i ;
@@ -148,14 +80,9 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)
14880 return 0 ;
14981
15082 if (!strcmp (argv [0 ], "clear" )) {
151- for (i = 0 ; i < merge_rr .nr ; i ++ ) {
152- const char * name = (const char * )merge_rr .items [i ].util ;
153- if (!has_rerere_resolution (name ))
154- unlink_rr_item (name );
155- }
156- unlink_or_warn (git_path ("MERGE_RR" ));
83+ rerere_clear (& merge_rr );
15784 } else if (!strcmp (argv [0 ], "gc" ))
158- garbage_collect (& merge_rr );
85+ rerere_gc (& merge_rr );
15986 else if (!strcmp (argv [0 ], "status" ))
16087 for (i = 0 ; i < merge_rr .nr ; i ++ )
16188 printf ("%s\n" , merge_rr .items [i ].string );
0 commit comments