From: "Shashank S via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kaartic Sivaraam <kaartic.sivaraam@gmail.com>,
Christian Couder <christian.couder@gmail.com>,
Siddharth Asthana <siddharthasthana31@gmail.com>,
Usman Akinyemi <usmanakinyemi202@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Shashank S <shashu8660@gmail.com>,
Shashank S Mogaveera <shashu8660@gmail.com>
Subject: [PATCH] test-chmtime: use parse_options() to parse command-line flags
Date: Tue, 27 Oct 2026 11:14:48 +0000 [thread overview]
Message-ID: <pull.2280.git.1793099688076.gitgitgadget@gmail.com> (raw)
From: Shashank S Mogaveera <shashu8660@gmail.com>
cmd__chmtime() currently parses the '-v'/'--verbose' and '-g'/'--get'
flags manually using strcmp() checks and manual index tracking.
Refactor cmd__chmtime() to use parse_options() and usage_with_options()
instead. Pass PARSE_OPT_KEEP_UNKNOWN_OPT so that negative relative time
offsets (such as '-86400') are not rejected as unknown short options
and remain in argv for timespec_arg() to parse.
Signed-off-by: Shashank S Mogaveera <shashu8660@gmail.com>
---
[Outreachy]test-chmtime: use parse_options() to parse command-line flags
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2280%2Fshashu8660%2Foutreachy3-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2280/shashu8660/outreachy3-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/2280
t/helper/test-chmtime.c | 46 +++++++++++++++++++----------------------
1 file changed, 21 insertions(+), 25 deletions(-)
diff --git a/t/helper/test-chmtime.c b/t/helper/test-chmtime.c
index 0e5538833a..dc6281b1d6 100644
--- a/t/helper/test-chmtime.c
+++ b/t/helper/test-chmtime.c
@@ -38,10 +38,13 @@
*/
#include "test-tool.h"
#include "git-compat-util.h"
+#include "parse-options.h"
#include <utime.h>
-static const char usage_str[] =
- "(-v|--verbose|-g|--get) (+|=|=+|=-|-)<seconds> <file>...";
+static const char * const chmtime_usage[] = {
+ "test-tool chmtime (-v|--verbose|-g|--get) (+|=|=+|=-|-)<seconds> <file>...",
+ NULL
+};
static int timespec_arg(const char *arg, long int *set_time, int *set_eq)
{
@@ -68,40 +71,37 @@ static int timespec_arg(const char *arg, long int *set_time, int *set_eq)
int cmd__chmtime(int argc, const char **argv)
{
- static int verbose;
- static int get;
+ int verbose = 0;
+ int get = 0;
- int i = 1;
+ int i = 0;
/* no mtime change by default */
int set_eq = 0;
long int set_time = 0;
- if (argc < 3)
- goto usage;
+ struct option options[] = {
+ OPT_BOOL('v', "verbose", &verbose, "print the mtime and the file name"),
+ OPT_BOOL('g', "get", &get, "print only the mtime"),
+ OPT_END()
+ };
- if (strcmp(argv[i], "--get") == 0 || strcmp(argv[i], "-g") == 0) {
- get = 1;
- ++i;
- } else if (strcmp(argv[i], "--verbose") == 0 || strcmp(argv[i], "-v") == 0) {
- verbose = 1;
- ++i;
- }
+ argc = parse_options(argc, argv, NULL, options, chmtime_usage,
+ PARSE_OPT_KEEP_UNKNOWN_OPT);
- if (i == argc) {
- goto usage;
- }
+ if (argc < 1 || (!get && !verbose && argc < 2))
+ usage_with_options(chmtime_usage, options);
if (timespec_arg(argv[i], &set_time, &set_eq)) {
++i;
} else {
if (get == 0 && verbose == 0) {
fprintf(stderr, "Not a base-10 integer: %s\n", argv[i] + 1);
- goto usage;
+ usage_with_options(chmtime_usage, options);
}
}
if (i == argc)
- goto usage;
+ usage_with_options(chmtime_usage, options);
for (; i < argc; i++) {
struct stat sb;
@@ -110,7 +110,7 @@ int cmd__chmtime(int argc, const char **argv)
if (stat(argv[i], &sb) < 0) {
fprintf(stderr, "Failed to stat %s: %s. Skipping\n",
- argv[i], strerror(errno));
+ argv[i], strerror(errno));
continue;
}
@@ -150,14 +150,10 @@ int cmd__chmtime(int argc, const char **argv)
}
#endif
fprintf(stderr, "Failed to modify time on %s: %s\n",
- argv[i], strerror(errno));
+ argv[i], strerror(errno));
return 1;
}
}
return 0;
-
-usage:
- fprintf(stderr, "usage: %s %s\n", argv[0], usage_str);
- return 1;
}
base-commit: 7e34d8174dcda3435d1404c9a30bef46afe6c13e
--
gitgitgadget
next reply other threads:[~2026-10-27 11:14 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-27 11:14 Shashank S via GitGitGadget [this message]
2026-10-27 18:38 ` [PATCH] test-chmtime: use parse_options() to parse command-line flags Junio C Hamano
2026-10-29 5:52 ` Shashank S
2026-10-27 18:48 ` Junio C Hamano
2026-10-29 5:54 ` Shashank S
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2280.git.1793099688076.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kaartic.sivaraam@gmail.com \
--cc=shashu8660@gmail.com \
--cc=siddharthasthana31@gmail.com \
--cc=usmanakinyemi202@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.