@ -53,6 +53,12 @@ long ParseInt(const char* s) {
return res ;
}
size_t ParseSizeT ( const char * s ) {
static_assert ( sizeof ( long ) < = sizeof ( size_t ) ) ;
long res = ParseLong ( s ) ;
return res > = 0 ? res : - 1 ;
}
void PrintUsage ( ) {
std : : cout < < " Usage: gitstatusd [OPTION]... \n "
< < " Print machine-readable status of the git repos for directores in stdin. \n "
@ -81,12 +87,18 @@ void PrintUsage() {
< < " repo that's been closed is much slower than for a repo that hasn't been. \n "
< < " Negative value means infinity. \n "
< < " \n "
< < " -z, --max-commit-summary-length=NUM [default=256] \n "
< < " Truncate commit summary if it's longer than this many bytes. \n "
< < " \n "
< < " -s, --max-num-staged=NUM [default=1] \n "
< < " Report at most this many staged changes; negative value means infinity. \n "
< < " \n "
< < " -u, --max-num-unstaged=NUM [default=1] \n "
< < " Report at most this many unstaged changes; negative value means infinity. \n "
< < " \n "
< < " -c, --max-num-conflicted=NUM [default=1] \n "
< < " Report at most this many conflicted changes; negative value means infinity. \n "
< < " \n "
< < " -d, --max-num-untracked=NUM [default=1] \n "
< < " Report at most this many untracked files; negative value means infinity. \n "
< < " \n "
@ -170,6 +182,8 @@ void PrintUsage() {
< < " 25. Number of commits the current branch is behind push remote. \n "
< < " 26. Number of files in the index with skip-worktree bit set. \n "
< < " 27. Number of files in the index with assume-unchanged bit set. \n "
< < " 28. Encoding of the HEAD's commit message. Empty value means UTF-8. \n "
< < " 29. The first paragraph of the HEAD's commit message as one line. \n "
< < " \n "
< < " Note: Renamed files are reported as deleted plus new. \n "
< < " \n "
@ -212,6 +226,8 @@ void PrintUsage() {
< < " '0' \n "
< < " '0' \n "
< < " '0' \n "
< < " '' \n "
< < " 'add a build server for darwin-arm64' \n "
< < " \n "
< < " EXIT STATUS \n "
< < " \n "
@ -239,12 +255,13 @@ const char* Version() {
Options ParseOptions ( int argc , char * * argv ) {
const struct option opts [ ] = { { " help " , no_argument , nullptr , ' h ' } ,
{ " version " , no_argument , nullptr , ' V ' } ,
{ " version-glob " , no _argument, nullptr , ' G ' } ,
{ " version-glob " , required _argument, nullptr , ' G ' } ,
{ " lock-fd " , required_argument , nullptr , ' l ' } ,
{ " parent-pid " , required_argument , nullptr , ' p ' } ,
{ " num-threads " , required_argument , nullptr , ' t ' } ,
{ " log-level " , required_argument , nullptr , ' v ' } ,
{ " repo-ttl-seconds " , required_argument , nullptr , ' r ' } ,
{ " max-commit-summary-length " , required_argument , nullptr , ' z ' } ,
{ " max-num-staged " , required_argument , nullptr , ' s ' } ,
{ " max-num-unstaged " , required_argument , nullptr , ' u ' } ,
{ " max-num-conflicted " , required_argument , nullptr , ' c ' } ,
@ -257,7 +274,7 @@ Options ParseOptions(int argc, char** argv) {
{ } } ;
Options res ;
while ( true ) {
switch ( getopt_long ( argc , argv , " hVG:l:p:t:v:r: s:u:c:d:m:eUWD" , opts , nullptr ) ) {
switch ( getopt_long ( argc , argv , " hVG:l:p:t:v:r: z: s:u:c:d:m:eUWD" , opts , nullptr ) ) {
case - 1 :
if ( optind ! = argc ) {
std : : cerr < < " unexpected positional argument: " < < argv [ optind ] < < std : : endl ;
@ -306,20 +323,23 @@ Options ParseOptions(int argc, char** argv) {
res . num_threads = n ;
break ;
}
case ' z ' :
res . max_commit_summary_length = ParseSizeT ( optarg ) ;
break ;
case ' s ' :
res . max_num_staged = ParseLong ( optarg ) ;
res . max_num_staged = Parse SizeT ( optarg ) ;
break ;
case ' u ' :
res . max_num_unstaged = Parse Long ( optarg ) ;
res . max_num_unstaged = Parse SizeT ( optarg ) ;
break ;
case ' c ' :
res . max_num_conflicted = Parse Long ( optarg ) ;
res . max_num_conflicted = Parse SizeT ( optarg ) ;
break ;
case ' d ' :
res . max_num_untracked = Parse Long ( optarg ) ;
res . max_num_untracked = Parse SizeT ( optarg ) ;
break ;
case ' m ' :
res . dirty_max_index_size = Parse Long ( optarg ) ;
res . dirty_max_index_size = Parse SizeT ( optarg ) ;
break ;
case ' e ' :
res . recurse_untracked_dirs = true ;