Merge branch 'jk/svn-color'
authorJunio C Hamano <gitster@pobox.com>
Thu, 13 Dec 2007 00:52:51 +0000 (16:52 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Dec 2007 00:52:51 +0000 (16:52 -0800)
* jk/svn-color:
git-svn: get color config from --get-colorbool
Support GIT_PAGER_IN_USE environment variable

cache.h
color.c
environment.c
git-svn.perl
pager.c
diff --git a/cache.h b/cache.h
index 1bcb3df7a20b7eb90c15807b92ae0e016266d5fd..27d90fe543b97eac91f61bf96f170c32d735e44d 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -608,7 +608,7 @@ extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char
 /* pager.c */
 extern void setup_pager(void);
 extern char *pager_program;
-extern int pager_in_use;
+extern int pager_in_use(void);
 extern int pager_use_color;
 
 extern char *editor_program;
diff --git a/color.c b/color.c
index 7bd424a8f6012859f40f2aa6210e7d4ce7686dc0..7f66c29fae57abceda30b1257c2a66626f3be0b2 100644 (file)
--- a/color.c
+++ b/color.c
@@ -135,7 +135,7 @@ int git_config_colorbool(const char *var, const char *value, int stdout_is_tty)
  auto_color:
        if (stdout_is_tty < 0)
                stdout_is_tty = isatty(1);
-       if (stdout_is_tty || (pager_in_use && pager_use_color)) {
+       if (stdout_is_tty || (pager_in_use() && pager_use_color)) {
                char *term = getenv("TERM");
                if (term && strcmp(term, "dumb"))
                        return 1;
index f3e3d4138d463520dbe6d709dfbe0803b619456d..18a1c4eec49bfddcb81d6669c83f8f97a218d7bf 100644 (file)
@@ -31,7 +31,6 @@ size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE;
 size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
 size_t delta_base_cache_limit = 16 * 1024 * 1024;
 char *pager_program;
-int pager_in_use;
 int pager_use_color = 1;
 char *editor_program;
 char *excludes_file;
index 9f884eb2132c76b86475b97256e0ed565f84bb2e..1c42c558c46d916282e0503e6d035db5cb293732 100755 (executable)
@@ -3969,39 +3969,7 @@ sub cmt_showable {
 }
 
 sub log_use_color {
-       return 1 if $color;
-       my ($dc, $dcvar);
-       $dcvar = 'color.diff';
-       $dc = `git-config --get $dcvar`;
-       if ($dc eq '') {
-               # nothing at all; fallback to "diff.color"
-               $dcvar = 'diff.color';
-               $dc = `git-config --get $dcvar`;
-       }
-       chomp($dc);
-       if ($dc eq 'auto') {
-               my $pc;
-               $pc = `git-config --get color.pager`;
-               if ($pc eq '') {
-                       # does not have it -- fallback to pager.color
-                       $pc = `git-config --bool --get pager.color`;
-               }
-               else {
-                       $pc = `git-config --bool --get color.pager`;
-                       if ($?) {
-                               $pc = 'false';
-                       }
-               }
-               chomp($pc);
-               if (-t *STDOUT || (defined $pager && $pc eq 'true')) {
-                       return ($ENV{TERM} && $ENV{TERM} ne 'dumb');
-               }
-               return 0;
-       }
-       return 0 if $dc eq 'never';
-       return 1 if $dc eq 'always';
-       chomp($dc = `git-config --bool --get $dcvar`);
-       return ($dc eq 'true');
+       return $color || Git->repository->get_colorbool('color.diff');
 }
 
 sub git_svn_log_cmd {
@@ -4060,6 +4028,7 @@ sub config_pager {
        } elsif (length $pager == 0 || $pager eq 'cat') {
                $pager = undef;
        }
+       $ENV{GIT_PAGER_IN_USE} = defined($pager);
 }
 
 sub run_pager {
diff --git a/pager.c b/pager.c
index fb7a1a625abf07b0d896a270286ee422a700c14c..0376953cb1b8a4095346e0d12ecef6e7db9c48c9 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -5,6 +5,8 @@
  * something different on Windows, for example.
  */
 
+static int spawned_pager;
+
 static void run_pager(const char *pager)
 {
        /*
@@ -41,7 +43,7 @@ void setup_pager(void)
        else if (!*pager || !strcmp(pager, "cat"))
                return;
 
-       pager_in_use = 1; /* means we are emitting to terminal */
+       spawned_pager = 1; /* means we are emitting to terminal */
 
        if (pipe(fd) < 0)
                return;
@@ -70,3 +72,14 @@ void setup_pager(void)
        die("unable to execute pager '%s'", pager);
        exit(255);
 }
+
+int pager_in_use(void)
+{
+       const char *env;
+
+       if (spawned_pager)
+               return 1;
+
+       env = getenv("GIT_PAGER_IN_USE");
+       return env ? git_config_bool("GIT_PAGER_IN_USE", env) : 0;
+}