Move setup_diff_pager to libgit.a
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Fri, 26 Oct 2012 15:53:52 +0000 (22:53 +0700)
committerJeff King <peff@peff.net>
Mon, 29 Oct 2012 07:08:30 +0000 (03:08 -0400)
This is used by diff-no-index.c, part of libgit.a while it stays in
builtin/diff.c. Move it to diff.c so that we won't get undefined
reference if a program that uses libgit.a happens to pull it in.

While at it, move check_pager from git.c to pager.c. It makes more
sense there and pager.c is also part of libgit.a

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
builtin.h
builtin/diff.c
cache.h
diff.c
diff.h
git.c
pager.c

index 95116b85358637d3457288c7d28526cb1fa93630..3faf9d6691413c006f4c82702aa5e0c5e4bc88a0 100644 (file)
--- a/builtin.h
+++ b/builtin.h
@@ -37,10 +37,6 @@ int copy_note_for_rewrite(struct notes_rewrite_cfg *c,
                          const unsigned char *from_obj, const unsigned char *to_obj);
 void finish_copy_notes_for_rewrite(struct notes_rewrite_cfg *c);
 
-extern int check_pager_config(const char *cmd);
-struct diff_options;
-extern void setup_diff_pager(struct diff_options *);
-
 extern int textconv_object(const char *path, unsigned mode, const unsigned char *sha1, int sha1_valid, char **buf, unsigned long *buf_size);
 
 extern int cmd_add(int argc, const char **argv, const char *prefix);
index 9650be2c50e6f79dbe033fae39f490d49c6318da..9c70e408096fc92ed1c5056425f1014313908a75 100644 (file)
@@ -418,19 +418,3 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
                refresh_index_quietly();
        return result;
 }
-
-void setup_diff_pager(struct diff_options *opt)
-{
-       /*
-        * If the user asked for our exit code, then either they want --quiet
-        * or --exit-code. We should definitely not bother with a pager in the
-        * former case, as we will generate no output. Since we still properly
-        * report our exit code even when a pager is run, we _could_ run a
-        * pager with --exit-code. But since we have not done so historically,
-        * and because it is easy to find people oneline advising "git diff
-        * --exit-code" in hooks and other scripts, we do not do so.
-        */
-       if (!DIFF_OPT_TST(opt, EXIT_WITH_STATUS) &&
-           check_pager_config("diff") != 0)
-               setup_pager();
-}
diff --git a/cache.h b/cache.h
index 2dc4decbc9d2ef994789dbda6bea1b40bcc9fe80..dbd8018b5827ce40fd72ac0ba84934551a11f225 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1183,6 +1183,7 @@ extern int pager_in_use(void);
 extern int pager_use_color;
 extern int term_columns(void);
 extern int decimal_width(int);
+extern int check_pager_config(const char *cmd);
 
 extern const char *editor_program;
 extern const char *askpass_program;
diff --git a/diff.c b/diff.c
index 86e5f2a4a881afd48563e63b0891495be12b82f0..135ba0d654fa760f6da8fa6713efa34bfa423ad8 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -4878,3 +4878,19 @@ size_t fill_textconv(struct userdiff_driver *driver,
 
        return size;
 }
+
+void setup_diff_pager(struct diff_options *opt)
+{
+       /*
+        * If the user asked for our exit code, then either they want --quiet
+        * or --exit-code. We should definitely not bother with a pager in the
+        * former case, as we will generate no output. Since we still properly
+        * report our exit code even when a pager is run, we _could_ run a
+        * pager with --exit-code. But since we have not done so historically,
+        * and because it is easy to find people oneline advising "git diff
+        * --exit-code" in hooks and other scripts, we do not do so.
+        */
+       if (!DIFF_OPT_TST(opt, EXIT_WITH_STATUS) &&
+           check_pager_config("diff") != 0)
+               setup_pager();
+}
diff --git a/diff.h b/diff.h
index a658f85f2bc87864f673f737f70c8ad366ab7153..a47bae48d5d14a321108aac3b3de3892587b264f 100644 (file)
--- a/diff.h
+++ b/diff.h
@@ -335,5 +335,6 @@ extern int parse_rename_score(const char **cp_p);
 
 extern int print_stat_summary(FILE *fp, int files,
                              int insertions, int deletions);
+extern void setup_diff_pager(struct diff_options *);
 
 #endif /* DIFF_H */
diff --git a/git.c b/git.c
index 8788b32ccd891eb4db25fd6f1232935635d5a153..d33f9b32a2895ef9f062f9fda487588daac6f5bc 100644 (file)
--- a/git.c
+++ b/git.c
@@ -17,39 +17,6 @@ const char git_more_info_string[] =
 
 static struct startup_info git_startup_info;
 static int use_pager = -1;
-struct pager_config {
-       const char *cmd;
-       int want;
-       char *value;
-};
-
-static int pager_command_config(const char *var, const char *value, void *data)
-{
-       struct pager_config *c = data;
-       if (!prefixcmp(var, "pager.") && !strcmp(var + 6, c->cmd)) {
-               int b = git_config_maybe_bool(var, value);
-               if (b >= 0)
-                       c->want = b;
-               else {
-                       c->want = 1;
-                       c->value = xstrdup(value);
-               }
-       }
-       return 0;
-}
-
-/* returns 0 for "no pager", 1 for "use pager", and -1 for "not specified" */
-int check_pager_config(const char *cmd)
-{
-       struct pager_config c;
-       c.cmd = cmd;
-       c.want = -1;
-       c.value = NULL;
-       git_config(pager_command_config, &c);
-       if (c.value)
-               pager_program = c.value;
-       return c.want;
-}
 
 static void commit_pager_choice(void) {
        switch (use_pager) {
diff --git a/pager.c b/pager.c
index c0b4387d969476232a4e00a7acf9b06dc4ef6edc..c1ecf657fdb32c1fa669f08ba33e358f15c5a07b 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -6,6 +6,12 @@
 #define DEFAULT_PAGER "less"
 #endif
 
+struct pager_config {
+       const char *cmd;
+       int want;
+       char *value;
+};
+
 /*
  * This is split up from the rest of git so that we can do
  * something different on Windows.
@@ -141,3 +147,31 @@ int decimal_width(int number)
                i *= 10;
        return width;
 }
+
+static int pager_command_config(const char *var, const char *value, void *data)
+{
+       struct pager_config *c = data;
+       if (!prefixcmp(var, "pager.") && !strcmp(var + 6, c->cmd)) {
+               int b = git_config_maybe_bool(var, value);
+               if (b >= 0)
+                       c->want = b;
+               else {
+                       c->want = 1;
+                       c->value = xstrdup(value);
+               }
+       }
+       return 0;
+}
+
+/* returns 0 for "no pager", 1 for "use pager", and -1 for "not specified" */
+int check_pager_config(const char *cmd)
+{
+       struct pager_config c;
+       c.cmd = cmd;
+       c.want = -1;
+       c.value = NULL;
+       git_config(pager_command_config, &c);
+       if (c.value)
+               pager_program = c.value;
+       return c.want;
+}