From: Junio C Hamano Date: Thu, 14 Sep 2017 08:40:37 +0000 (+0900) Subject: Merge branch 'ma/remove-config-maybe-bool' into next X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/d0c7fb97a9c46507d77584d8edfa60198d1ce51e?hp=-c Merge branch 'ma/remove-config-maybe-bool' into next Finishing touches to a recent topic. * ma/remove-config-maybe-bool: config: remove git_config_maybe_bool --- d0c7fb97a9c46507d77584d8edfa60198d1ce51e diff --combined config.c index 7931182a54,f49cd2a014..cd5a69e630 --- a/config.c +++ b/config.c @@@ -956,11 -956,6 +956,6 @@@ int git_parse_maybe_bool(const char *va return -1; } - int git_config_maybe_bool(const char *name, const char *value) - { - return git_parse_maybe_bool(value); - } - int git_config_bool_or_int(const char *name, const char *value, int *is_bool) { int v = git_parse_maybe_bool_text(value); @@@ -2094,28 -2089,6 +2089,28 @@@ int git_config_get_expiry(const char *k return ret; } +int git_config_get_expiry_in_days(const char *key, timestamp_t *expiry, timestamp_t now) +{ + char *expiry_string; + intmax_t days; + timestamp_t when; + + if (git_config_get_string(key, &expiry_string)) + return 1; /* no such thing */ + + if (git_parse_signed(expiry_string, &days, maximum_signed_value_of_type(int))) { + const int scale = 86400; + *expiry = now - days * scale; + return 0; + } + + if (!parse_expiry_date(expiry_string, &when)) { + *expiry = when; + return 0; + } + return -1; /* thing exists but cannot be parsed */ +} + int git_config_get_untracked_cache(void) { int val = -1; @@@ -2450,7 -2423,7 +2445,7 @@@ int git_config_set_multivar_in_file_gen { int fd = -1, in_fd = -1; int ret; - struct lock_file *lock = NULL; + struct lock_file lock = LOCK_INIT; char *filename_buf = NULL; char *contents = NULL; size_t contents_sz; @@@ -2469,7 -2442,8 +2464,7 @@@ * The lock serves a purpose in addition to locking: the new * contents of .git/config will be written into it. */ - lock = xcalloc(1, sizeof(struct lock_file)); - fd = hold_lock_file_for_update(lock, config_filename, 0); + fd = hold_lock_file_for_update(&lock, config_filename, 0); if (fd < 0) { error_errno("could not lock config file %s", config_filename); free(store.key); @@@ -2582,8 -2556,8 +2577,8 @@@ close(in_fd); in_fd = -1; - if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) { - error_errno("chmod on %s failed", get_lock_file_path(lock)); + if (chmod(get_lock_file_path(&lock), st.st_mode & 07777) < 0) { + error_errno("chmod on %s failed", get_lock_file_path(&lock)); ret = CONFIG_NO_WRITE; goto out_free; } @@@ -2638,19 -2612,28 +2633,19 @@@ contents = NULL; } - if (commit_lock_file(lock) < 0) { + if (commit_lock_file(&lock) < 0) { error_errno("could not write config file %s", config_filename); ret = CONFIG_NO_WRITE; - lock = NULL; goto out_free; } - /* - * lock is committed, so don't try to roll it back below. - * NOTE: Since lockfile.c keeps a linked list of all created - * lock_file structures, it isn't safe to free(lock). It's - * better to just leave it hanging around. - */ - lock = NULL; ret = 0; /* Invalidate the config cache */ git_config_clear(); out_free: - if (lock) - rollback_lock_file(lock); + rollback_lock_file(&lock); free(filename_buf); if (contents) munmap(contents, contents_sz); @@@ -2659,7 -2642,7 +2654,7 @@@ return ret; write_err_out: - ret = write_error(get_lock_file_path(lock)); + ret = write_error(get_lock_file_path(&lock)); goto out_free; } diff --combined config.h index 97471b8873,bc008b9e15..456b3d134d --- a/config.h +++ b/config.h @@@ -56,7 -56,6 +56,6 @@@ extern unsigned long git_config_ulong(c extern ssize_t git_config_ssize_t(const char *, const char *); 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_maybe_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_set_in_file_gently(const char *, const char *, const char *); @@@ -215,9 -214,6 +214,9 @@@ extern int git_config_get_max_percent_s /* This dies if the configured or default date is in the future */ extern int git_config_get_expiry(const char *key, const char **output); +/* parse either "this many days" integer, or "5.days.ago" approxidate */ +extern int git_config_get_expiry_in_days(const char *key, timestamp_t *, timestamp_t now); + struct key_value_info { const char *filename; int linenr;