From: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
To: Tanay Abhra <tanayabh@gmail.com>
Cc: git@vger.kernel.org, Ramkumar Ramachandra <artagnon@gmail.com>
Subject: Re: [PATCH/RFC] rewrite `git_default_config()` using config-set API functions
Date: Mon, 21 Jul 2014 15:43:44 +0200 [thread overview]
Message-ID: <vpqha2addyn.fsf@anie.imag.fr> (raw)
In-Reply-To: <53CCFD02.6010704@gmail.com> (Tanay Abhra's message of "Mon, 21 Jul 2014 17:14:02 +0530")
Tanay Abhra <tanayabh@gmail.com> writes:
> Consider this as a proof of concept as the others callers have to be rewritten
> as well.
> I think that it is not so buggy as it passes all the tests.
Before and after your patch, git_default_config() is called once per
config key. Before the patch, it made sense, but after the patch, it
doesn't anymore, as it loads the whole config file in one call.
I think it's OK to have this as an intermediate patch, but it should be
clear to reviewers.
At the end of your series, git_default_config should become an
argumentless function.
Actually, I'm wondering whether it makes sense to keep
git_default_config as-is, and introduce a new function like
git_load_default_config(void), initially empty. Then, move and change
code from git_default_config(...) to git_load_default_config(), and
finally remove git_default_config(...) once it's empty.
You have several decl-after-statements in your patch. You should have
something like this in config.mak to catch them:
CFLAGS += -Wdeclaration-after-statement -Wall -Werror
There are several (long unsigned int*) casts that seem useless to me.
Useless casts distract the reader, and prevent usefull warnings from the
compiler.
Actually, I'm wondering whether these casts are safe (they cast from
size_t * to ulong *). On Windows 64 bits for example, sizeof(size_t) ==
8 and sizeof(unsigned long) == 4 if google informed me correctly. On a
big-endian machine, this would be totally broken.
It is probably safer to add a new git_config_get_size_t analog to
git_config_get_ulong.
> + if > + git_config_get_string("core.notesref", (const char**)¬es_ref_name);
This cast is needed only because notes_ref_name is declared as
non-const, but a better fix would be to make the variable const, and
remove the cast.
The following patch solves these issues (modulo the question above on
cast safety).
diff --git a/cache.h b/cache.h
index e667d92..1271904 100644
--- a/cache.h
+++ b/cache.h
@@ -674,7 +674,7 @@ enum object_creation_mode {
extern enum object_creation_mode object_creation_mode;
-extern char *notes_ref_name;
+extern const char *notes_ref_name;
extern int grafts_replace_parents;
diff --git a/config.c b/config.c
index 72196a9..c2664c3 100644
--- a/config.c
+++ b/config.c
@@ -669,6 +669,9 @@ int git_config_pathname(const char **dest, const char *var, const char *value)
static void git_default_core_config(void)
{
const char *value = NULL;
+ int abbrev;
+ int level;
+ const char *comment;
/* This needs a better name */
git_config_get_bool("core.filemode", &trust_executable_bit);
git_config_get_bool("core.trustctime", &trust_ctime);
@@ -690,13 +693,11 @@ static void git_default_core_config(void)
git_config_get_bool("core.logallrefupdates", &log_all_ref_updates);
git_config_get_bool("core.warnambiguousrefs", &warn_ambiguous_refs);
- int abbrev;
if (!git_config_get_int("core.abbrev", &abbrev)) {
if (abbrev >= minimum_abbrev && abbrev <= 40)
default_abbrev = abbrev;
}
- int level;
if (!git_config_get_int("core.loosecompression", &level)) {
if (level == -1)
level = Z_DEFAULT_COMPRESSION;
@@ -717,7 +718,7 @@ static void git_default_core_config(void)
zlib_compression_level = level;
}
- if (!git_config_get_ulong("core.packedgitwindowsize", (long unsigned int*)&packed_git_window_size)) {
+ if (!git_config_get_ulong("core.packedgitwindowsize", &packed_git_window_size)) {
int pgsz_x2 = getpagesize() * 2;
/* This value must be multiple of (pagesize * 2) */
@@ -728,8 +729,8 @@ static void git_default_core_config(void)
}
git_config_get_ulong("core.bigfilethreshold", &big_file_threshold);
- git_config_get_ulong("core.packedgitlimit", (long unsigned int*)&packed_git_limit);
- git_config_get_ulong("core.deltabasecachelimit", (long unsigned int*)&delta_base_cache_limit);
+ git_config_get_ulong("core.packedgitlimit", &packed_git_limit);
+ git_config_get_ulong("core.deltabasecachelimit", &delta_base_cache_limit);
if (!git_config_get_value("core.autocrlf", &value)) {
if (value && !strcasecmp(value, "input")) {
@@ -760,11 +761,10 @@ static void git_default_core_config(void)
die("core.autocrlf=input conflicts with core.eol=crlf");
}
- git_config_get_string("core.notesref", (const char**)¬es_ref_name);
+ git_config_get_string("core.notesref", ¬es_ref_name);
git_config_get_string("core.pager", &pager_program);
git_config_get_string("core.editor", &editor_program);
- const char *comment;
if (!git_config_get_string("core.commentchar", &comment)) {
if (!strcasecmp(comment, "auto"))
auto_comment_line_char = 1;
diff --git a/environment.c b/environment.c
index 565f652..21d4dbb 100644
--- a/environment.c
+++ b/environment.c
@@ -56,7 +56,7 @@ enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED;
#define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS
#endif
enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE;
-char *notes_ref_name;
+const char *notes_ref_name;
int grafts_replace_parents = 1;
int core_apply_sparse_checkout;
int merge_log_config = -1;
--
Matthieu Moy
http://www-verimag.imag.fr/~moy/
next prev parent reply other threads:[~2014-07-21 13:43 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-21 11:12 [PATCH v3 0/6] git_config callers rewritten with the new config cache API Tanay Abhra
2014-07-21 11:12 ` [PATCH v3 1/6] alias.c: replace `git_config()` with `git_config_get_string()` Tanay Abhra
2014-07-21 12:52 ` Matthieu Moy
2014-07-21 13:43 ` Ramsay Jones
2014-07-31 17:13 ` Samuel Bronson
2014-07-21 11:12 ` [PATCH v3 2/6] branch.c: " Tanay Abhra
2014-07-21 17:59 ` Junio C Hamano
2014-07-21 18:06 ` Matthieu Moy
2014-07-21 18:11 ` Tanay Abhra
2014-07-21 11:12 ` [PATCH v3 3/6] imap-send.c: replace `git_config()` with `git_config_get_*()` family Tanay Abhra
2014-07-21 18:00 ` Junio C Hamano
2014-07-21 11:12 ` [PATCH v3 4/6] notes.c: replace `git_config()` with `git_config_get_value()` Tanay Abhra
2014-07-21 11:12 ` [PATCH v3 5/6] pager.c: " Tanay Abhra
2014-07-21 11:12 ` [PATCH v3 6/6] notes-util.c: " Tanay Abhra
2014-07-22 11:23 ` Jeff King
2014-07-21 11:44 ` [PATCH/RFC] rewrite `git_default_config()` using config-set API functions Tanay Abhra
2014-07-21 13:43 ` Matthieu Moy [this message]
2014-07-21 14:23 ` Tanay Abhra
2014-07-21 15:37 ` Matthieu Moy
2014-07-21 18:07 ` Junio C Hamano
2014-07-22 7:55 ` Matthieu Moy
2014-07-21 13:59 ` Ramsay Jones
2014-07-21 12:51 ` [PATCH v3 0/6] git_config callers rewritten with the new config cache API Matthieu Moy
2014-07-21 13:15 ` Tanay Abhra
2014-07-21 13:45 ` Matthieu Moy
2014-07-21 14:00 ` Tanay Abhra
2014-07-21 14:27 ` Matthieu Moy
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=vpqha2addyn.fsf@anie.imag.fr \
--to=matthieu.moy@grenoble-inp.fr \
--cc=artagnon@gmail.com \
--cc=git@vger.kernel.org \
--cc=tanayabh@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.