@@ -277,11 +277,64 @@ static void get_from_rev(struct rev_info *rev, struct path_list *list)
277
277
278
278
}
279
279
280
+ static int parse_uint (char const * * arg , int comma )
281
+ {
282
+ unsigned long ul ;
283
+ int ret ;
284
+ char * endp ;
285
+
286
+ ul = strtoul (* arg , & endp , 10 );
287
+ if (endp != * arg && * endp && * endp != comma )
288
+ return -1 ;
289
+ ret = (int ) ul ;
290
+ if (ret != ul )
291
+ return -1 ;
292
+ * arg = endp ;
293
+ if (* * arg )
294
+ (* arg )++ ;
295
+ return ret ;
296
+ }
297
+
298
+ static const char wrap_arg_usage [] = "-w[<width>[,<indent1>[,<indent2>]]]" ;
299
+ #define DEFAULT_WRAPLEN 76
300
+ #define DEFAULT_INDENT1 6
301
+ #define DEFAULT_INDENT2 9
302
+
303
+ static void parse_wrap_args (const char * arg , int * in1 , int * in2 , int * wrap )
304
+ {
305
+ arg += 2 ; /* skip -w */
306
+
307
+ * wrap = parse_uint (& arg , ',' );
308
+ if (* wrap < 0 )
309
+ die (wrap_arg_usage );
310
+ * in1 = parse_uint (& arg , ',' );
311
+ if (* in1 < 0 )
312
+ die (wrap_arg_usage );
313
+ * in2 = parse_uint (& arg , '\0' );
314
+ if (* in2 < 0 )
315
+ die (wrap_arg_usage );
316
+
317
+ if (!* wrap )
318
+ * wrap = DEFAULT_WRAPLEN ;
319
+ if (!* in1 )
320
+ * in1 = DEFAULT_INDENT1 ;
321
+ if (!* in2 )
322
+ * in2 = DEFAULT_INDENT2 ;
323
+ if (* wrap &&
324
+ ((* in1 && * wrap <= * in1 ) ||
325
+ (* in2 && * wrap <= * in2 )))
326
+ die (wrap_arg_usage );
327
+ }
328
+
280
329
int cmd_shortlog (int argc , const char * * argv , const char * prefix )
281
330
{
282
331
struct rev_info rev ;
283
332
struct path_list list = { NULL , 0 , 0 , 1 };
284
333
int i , j , sort_by_number = 0 , summary = 0 ;
334
+ int wrap_lines = 0 ;
335
+ int wrap = DEFAULT_WRAPLEN ;
336
+ int in1 = DEFAULT_INDENT1 ;
337
+ int in2 = DEFAULT_INDENT2 ;
285
338
286
339
/* since -n is a shadowed rev argument, parse our args first */
287
340
while (argc > 1 ) {
@@ -290,6 +343,10 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
290
343
else if (!strcmp (argv [1 ], "-s" ) ||
291
344
!strcmp (argv [1 ], "--summary" ))
292
345
summary = 1 ;
346
+ else if (!prefixcmp (argv [1 ], "-w" )) {
347
+ wrap_lines = 1 ;
348
+ parse_wrap_args (argv [1 ], & in1 , & in2 , & wrap );
349
+ }
293
350
else if (!strcmp (argv [1 ], "-h" ) || !strcmp (argv [1 ], "--help" ))
294
351
usage (shortlog_usage );
295
352
else
@@ -325,10 +382,15 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
325
382
} else {
326
383
printf ("%s (%d):\n" , list .items [i ].path , onelines -> nr );
327
384
for (j = onelines -> nr - 1 ; j >= 0 ; j -- ) {
328
- int col = print_wrapped_text (onelines -> items [j ].path ,
329
- 6 , 9 , 76 );
330
- if (col != 76 )
331
- putchar ('\n' );
385
+ const char * msg = onelines -> items [j ].path ;
386
+
387
+ if (wrap_lines ) {
388
+ int col = print_wrapped_text (msg , in1 , in2 , wrap );
389
+ if (col != wrap )
390
+ putchar ('\n' );
391
+ }
392
+ else
393
+ printf (" %s\n" , msg );
332
394
}
333
395
putchar ('\n' );
334
396
}
0 commit comments