@@ -33,25 +33,6 @@ static const char *reset_type_names[] = {
33
33
N_ ("mixed" ), N_ ("soft" ), N_ ("hard" ), N_ ("merge" ), N_ ("keep" ), NULL
34
34
};
35
35
36
- static char * args_to_str (const char * * argv )
37
- {
38
- char * buf = NULL ;
39
- unsigned long len , space = 0 , nr = 0 ;
40
-
41
- for (; * argv ; argv ++ ) {
42
- len = strlen (* argv );
43
- ALLOC_GROW (buf , nr + 1 + len , space );
44
- if (nr )
45
- buf [nr ++ ] = ' ' ;
46
- memcpy (buf + nr , * argv , len );
47
- nr += len ;
48
- }
49
- ALLOC_GROW (buf , nr + 1 , space );
50
- buf [nr ] = '\0' ;
51
-
52
- return buf ;
53
- }
54
-
55
36
static inline int is_merge (void )
56
37
{
57
38
return !access (git_path ("MERGE_HEAD" ), F_OK );
@@ -215,14 +196,18 @@ static int read_from_tree(const char *prefix, const char **argv,
215
196
return update_index_refresh (index_fd , lock , refresh_flags );
216
197
}
217
198
218
- static void prepend_reflog_action (const char * action , char * buf , size_t size )
199
+ static void set_reflog_message (struct strbuf * sb , const char * action ,
200
+ const char * rev )
219
201
{
220
- const char * sep = ": " ;
221
202
const char * rla = getenv ("GIT_REFLOG_ACTION" );
222
- if (!rla )
223
- rla = sep = "" ;
224
- if (snprintf (buf , size , "%s%s%s" , rla , sep , action ) >= size )
225
- warning (_ ("Reflog action message too long: %.*s..." ), 50 , buf );
203
+
204
+ strbuf_reset (sb );
205
+ if (rla )
206
+ strbuf_addf (sb , "%s: %s" , rla , action );
207
+ else if (rev )
208
+ strbuf_addf (sb , "reset: moving to %s" , rev );
209
+ else
210
+ strbuf_addf (sb , "reset: %s" , action );
226
211
}
227
212
228
213
static void die_if_unmerged_cache (int reset_type )
@@ -241,7 +226,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
241
226
unsigned char sha1 [20 ], * orig = NULL , sha1_orig [20 ],
242
227
* old_orig = NULL , sha1_old_orig [20 ];
243
228
struct commit * commit ;
244
- char * reflog_action , msg [ 1024 ] ;
229
+ struct strbuf msg = STRBUF_INIT ;
245
230
const struct option options [] = {
246
231
OPT__QUIET (& quiet , "be quiet, only report errors" ),
247
232
OPT_SET_INT (0 , "mixed" , & reset_type ,
@@ -261,8 +246,6 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
261
246
262
247
argc = parse_options (argc , argv , prefix , options , git_reset_usage ,
263
248
PARSE_OPT_KEEP_DASHDASH );
264
- reflog_action = args_to_str (argv );
265
- setenv ("GIT_REFLOG_ACTION" , reflog_action , 0 );
266
249
267
250
/*
268
251
* Possible arguments are:
@@ -357,13 +340,13 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
357
340
old_orig = sha1_old_orig ;
358
341
if (!get_sha1 ("HEAD" , sha1_orig )) {
359
342
orig = sha1_orig ;
360
- prepend_reflog_action ( "updating ORIG_HEAD" , msg , sizeof ( msg ) );
361
- update_ref (msg , "ORIG_HEAD" , orig , old_orig , 0 , MSG_ON_ERR );
343
+ set_reflog_message ( & msg , "updating ORIG_HEAD" , NULL );
344
+ update_ref (msg . buf , "ORIG_HEAD" , orig , old_orig , 0 , MSG_ON_ERR );
362
345
}
363
346
else if (old_orig )
364
347
delete_ref ("ORIG_HEAD" , old_orig , 0 );
365
- prepend_reflog_action ( "updating HEAD" , msg , sizeof ( msg ) );
366
- update_ref_status = update_ref (msg , "HEAD" , sha1 , orig , 0 , MSG_ON_ERR );
348
+ set_reflog_message ( & msg , "updating HEAD" , rev );
349
+ update_ref_status = update_ref (msg . buf , "HEAD" , sha1 , orig , 0 , MSG_ON_ERR );
367
350
368
351
switch (reset_type ) {
369
352
case HARD :
@@ -380,7 +363,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
380
363
381
364
remove_branch_state ();
382
365
383
- free ( reflog_action );
366
+ strbuf_release ( & msg );
384
367
385
368
return update_ref_status ;
386
369
}
0 commit comments