From: Haaris <hsed@unimetic.com>
To: git@vger.kernel.org
Subject: [PATCH] config: added --expiry-date type support
Date: Sun, 12 Nov 2017 12:19:35 +0000 [thread overview]
Message-ID: <0102015fb02bb5be-02c77f83-5a20-4ca1-8bab-5e9519cbd758-000000@eu-west-1.amazonses.com> (raw)
---
builtin/config.c | 11 ++++++++++-
config.c | 9 +++++++++
config.h | 1 +
t/t1300-repo-config.sh | 25 +++++++++++++++++++++++++
4 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/builtin/config.c b/builtin/config.c
index d13daeeb55927..41cd9f5ca7cde 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -52,6 +52,7 @@ static int show_origin;
#define TYPE_INT (1<<1)
#define TYPE_BOOL_OR_INT (1<<2)
#define TYPE_PATH (1<<3)
+#define TYPE_EXPIRY_DATE (1<<4)
static struct option builtin_config_options[] = {
OPT_GROUP(N_("Config file location")),
@@ -80,6 +81,7 @@ static struct option builtin_config_options[] = {
OPT_BIT(0, "int", &types, N_("value is decimal number"), TYPE_INT),
OPT_BIT(0, "bool-or-int", &types, N_("value is --bool or --int"), TYPE_BOOL_OR_INT),
OPT_BIT(0, "path", &types, N_("value is a path (file or directory name)"), TYPE_PATH),
+ OPT_BIT(0, "expiry-date", &types, N_("value is an expiry date"), TYPE_EXPIRY_DATE),
OPT_GROUP(N_("Other")),
OPT_BOOL('z', "null", &end_null, N_("terminate values with NUL byte")),
OPT_BOOL(0, "name-only", &omit_values, N_("show variable names only")),
@@ -159,6 +161,12 @@ static int format_config(struct strbuf *buf, const char *key_, const char *value
return -1;
strbuf_addstr(buf, v);
free((char *)v);
+ } else if (types == TYPE_EXPIRY_DATE) {
+ timestamp_t *t = malloc(sizeof(*t));
+ if(git_config_expiry_date(&t, key_, value_) < 0)
+ return -1;
+ strbuf_addf(buf, "%"PRItime, *t);
+ free((timestamp_t *)t);
} else if (value_) {
strbuf_addstr(buf, value_);
} else {
@@ -273,12 +281,13 @@ static char *normalize_value(const char *key, const char *value)
if (!value)
return NULL;
- if (types == 0 || types == TYPE_PATH)
+ if (types == 0 || types == TYPE_PATH || types == TYPE_EXPIRY_DATE)
/*
* We don't do normalization for TYPE_PATH here: If
* the path is like ~/foobar/, we prefer to store
* "~/foobar/" in the config file, and to expand the ~
* when retrieving the value.
+ * Also don't do normalization for expiry dates.
*/
return xstrdup(value);
if (types == TYPE_INT)
diff --git a/config.c b/config.c
index 903abf9533b18..caa2fd5fb6915 100644
--- a/config.c
+++ b/config.c
@@ -990,6 +990,15 @@ int git_config_pathname(const char **dest, const char *var, const char *value)
return 0;
}
+int git_config_expiry_date(timestamp_t **timestamp, const char *var, const char *value)
+{
+ if (!value)
+ return config_error_nonbool(var);
+ if (!!parse_expiry_date(value, *timestamp))
+ die(_("failed to parse date_string in: '%s'"), value);
+ return 0;
+}
+
static int git_default_core_config(const char *var, const char *value)
{
/* This needs a better name */
diff --git a/config.h b/config.h
index a49d264416225..2d127d9d23c90 100644
--- a/config.h
+++ b/config.h
@@ -58,6 +58,7 @@ extern int git_config_bool_or_int(const char *, const char *, int *);
extern int git_config_bool(const char *, const char *);
extern int git_config_string(const char **, const char *, const char *);
extern int git_config_pathname(const char **, const char *, const char *);
+extern int git_config_expiry_date(timestamp_t **, const char *, const char *);
extern int git_config_set_in_file_gently(const char *, const char *, const char *);
extern void git_config_set_in_file(const char *, const char *, const char *);
extern int git_config_set_gently(const char *, const char *);
diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
index 364a537000bbb..59a35be89e511 100755
--- a/t/t1300-repo-config.sh
+++ b/t/t1300-repo-config.sh
@@ -901,6 +901,31 @@ test_expect_success 'get --path barfs on boolean variable' '
test_must_fail git config --get --path path.bool
'
+test_expect_success 'get --expiry-date' '
+ cat >.git/config <<-\EOF &&
+ [date]
+ valid1 = "Fri Jun 4 15:46:55 2010"
+ valid2 = "2017/11/11 11:11:11PM"
+ valid3 = "2017/11/10 09:08:07 PM"
+ valid4 = "never"
+ invalid1 = "abc"
+ EOF
+ cat >expect <<-\EOF &&
+ 1275666415
+ 1510441871
+ 1510348087
+ 0
+ EOF
+ {
+ git config --expiry-date date.valid1 &&
+ git config --expiry-date date.valid2 &&
+ git config --expiry-date date.valid3 &&
+ git config --expiry-date date.valid4
+ } >actual &&
+ test_cmp expect actual &&
+ test_must_fail git config --expiry-date date.invalid1
+'
+
cat > expect << EOF
[quote]
leading = " test"
--
https://github.com/git/git/pull/433
next reply other threads:[~2017-11-12 12:19 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-12 12:19 Haaris [this message]
2017-11-12 13:55 ` [PATCH] config: added --expiry-date type support Kevin Daudt
2017-11-12 14:22 ` Jeff King
2017-11-12 14:55 ` Jeff King
[not found] ` <a05a8e8020ec31cfd9a0271ce2a00034@unimetic.com>
2017-11-12 19:43 ` hsed
2017-11-14 2:04 ` [PATCH V2] config: add --expiry-date hsed
2017-11-14 6:21 ` Christian Couder
2017-11-14 16:03 ` Marc Branchaud
2017-11-14 6:38 ` Junio C Hamano
2017-11-15 22:10 ` hsed
2017-11-16 0:05 ` [PATCH V3] " hsed
2017-11-16 0:54 ` Junio C Hamano
2017-11-17 18:15 ` hsed
2017-11-18 2:27 ` [PATCH V4] " hsed
2017-11-18 3:37 ` Junio C Hamano
2017-11-20 14:53 ` hsed
2017-11-20 17:04 ` Jeff King
2017-11-20 20:28 ` Stefan Beller
2017-11-20 20:37 ` Jeff King
2017-11-30 11:18 ` Heiko Voigt
2017-11-30 17:45 ` Jeff King
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0102015fb02bb5be-02c77f83-5a20-4ca1-8bab-5e9519cbd758-000000@eu-west-1.amazonses.com \
--to=hsed@unimetic.com \
--cc=git@vger.kernel.org \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).