Git development
 help / color / mirror / Atom feed
* Re: Git User's Survey 2007 unfinished summary continued
From: Andreas Ericsson @ 2007-10-14  8:45 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Linus Torvalds, J. Bruce Fields, Jakub Narebski, git
In-Reply-To: <Pine.LNX.4.64.0710140304430.25221@racer.site>

Johannes Schindelin wrote:
> Hi,
> 
> On Sat, 13 Oct 2007, Linus Torvalds wrote:
> 
>>
>> Not everybody is a "doer". It's important to get input from people who are 
>> just plain users, or hope to be.
> 
> A pity, but you're probably right.
> 

It's not a pity, and he's most definitely right. Users tend to think in terms
of "I'd like to get this task done" while coders tend to think in terms of
"this would be cool/possible to implement". The reason git actually *works* so
great is, I'm sure, the fact that it was originally designed around a very specific
need by someone thinking like a *user*. The fact that it happened to be a pretty
competent programmer just meant he could express his wishes as algorithms in a
programming language and make it happen.

I'm 100% sure that if Linus had been so interested in SCM's that he'd abandoned
the Linux kernel to be full-time maintainer for git instead, it would have had
all sorts of oddities in it that nobody uses, just because they're possible to
do.

I also think Linus made a very wise decision in picking Junio to maintain it. So
far, I haven't seen him accept a single feature-patch into git that wasn't
explained to solve a specific problem.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply

* [PATCH] Add color to git-add--interactive diffs (Take 2: now without spurious line break!)
From: Tom Tobin @ 2007-10-14  8:44 UTC (permalink / raw)
  To: Git Mailing List

(This is repost; my damned mail client wrapped a line in the patch last
time, and now I've got that under control.  My apologies!)  :(

Seeing the recent discussion and code regarding adding color to
git-add--interactive, I thought I'd throw in my recent attempt at
colorizing the diffs.  (This doesn't handle anything else, such as the
prompts.)

After banging my head against parsing colorized output of git-add-files,
I gave up and implemented internal colorization keying off of the
color.diff configuration.

Hopefully this can be of some use towards fully colorizing
git-add--interactive; I'll admit up front that Perl isn't my primary
language, so I apologize in advance for whatever stupidities I've
introduced.  ;) 

Signed-off-by: Tom Tobin <korpios@korpios.com>
---
 git-add--interactive.perl |  111 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 109 insertions(+), 2 deletions(-)

diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index be68814..eeb38e6 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -1,5 +1,6 @@
 #!/usr/bin/perl -w
 
+use List::Util qw(first);
 use strict;
 
 sub run_cmd_pipe {
@@ -22,6 +23,112 @@ if (!defined $GIT_DIR) {
 }
 chomp($GIT_DIR);
 
+my ($use_color) = 0;
+my (%term_color_codes) = (
+	"normal", "", "black", "0", "red", "1",
+	"green", "2", "yellow", "3", "blue", "4",
+	"magenta", "5", "cyan", "6", "white", "7"
+);
+my (%term_attr_codes) = (
+	"bold", "1", "dim", "2", "ul", "4", "blink", "5", "reverse", "7"
+);
+my %colorconfig = (
+	'color.diff' => 'never',
+	'color.diff.plain' => '',
+	'color.diff.meta' => 'bold',
+	'color.diff.frag' => 'cyan',
+	'color.diff.old' => 'red',
+	'color.diff.new' => 'green',
+	'color.diff.commit' => 'yellow',
+	'color.diff.whitespace' => 'normal red'
+	);
+for (split("\n", `git-config --get-regexp '^color\.diff'`)) {
+	my ($var, $val) = $_ =~ /^([^\s]+)\s(.*)$/;
+	$colorconfig{$var} = $val;
+}
+if (first { $_ eq $colorconfig{'color.diff'} } ("true", "always", "auto")) {
+	$use_color = 1;
+}
+
+sub parse_color {
+	my ($fg, $bg, $attr, $lookup);
+	my ($fg_code, $bg_code, $attr_code, $output_code) = ("", "", "", "");
+	my (@color) = @_;
+	my (@colorvals) = defined($color[0]) ? split(" ", $color[0]) : ();
+
+	for (@colorvals) {
+		$lookup = $term_color_codes{$_};
+		if (defined($lookup)) {
+			if (!defined($fg)) {
+				$fg = 1;
+				$fg_code = "3$lookup";
+			} elsif (!defined($bg)) {
+				$bg = 1;
+				$bg_code = "4$lookup";
+			} else {
+				die("Color slots only take up to two colors!");
+			}
+			next;
+		}
+		$lookup = $term_attr_codes{$_};
+		if (defined($lookup)) {
+			if (!defined($attr)) {
+				$attr = 1;
+				$attr_code = $lookup;
+			} else {
+				die("Color slots only take a single attribute!");
+			}
+		} else {
+			die("Unrecognized value for color slot!");
+		}
+	}
+	for ($fg_code, $bg_code, $attr_code) {
+		if ($_ eq "") {
+			next;
+		}
+		if ($output_code ne "") {
+			$output_code = $output_code . ";";
+		}
+		$output_code = $output_code . $_;
+	}
+	if (length($output_code)) {
+		return "\e[${output_code}m";
+	} else {
+		return "";
+	}
+}
+
+sub colorize_head_line {
+	my $line = shift @_;
+	if ($use_color) {
+		# git doesn't colorize these by default, soooo
+		# if ($line =~ /^\+/) {
+		#	 return parse_color($colorconfig{'color.diff.new'}) . "$line\e[m";
+		# }
+		# if ($line =~ /^-/) {
+		#	 return parse_color($colorconfig{'color.diff.old'}) . "$line\e[m";
+		# }
+		return parse_color($colorconfig{'color.diff.meta'}) . "$line\e[m";
+	}
+	return $line;
+}
+
+sub colorize_hunk_line {
+	my $line = shift @_;
+	if ($use_color) {
+		if ($line =~ /^\+/) {
+			return parse_color($colorconfig{'color.diff.new'}) . "$line\e[m";
+		}
+		if ($line =~ /^-/) {
+			return parse_color($colorconfig{'color.diff.old'}) . "$line\e[m";
+		}
+		if ($line =~ /^@@ /) {
+			return parse_color($colorconfig{'color.diff.frag'}) . "$line\e[m";
+		}
+	}
+	return $line;
+}
+
 sub refresh {
 	my $fh;
 	open $fh, 'git update-index --refresh |'
@@ -573,7 +680,7 @@ sub patch_update_cmd {
 	my $path = $it->{VALUE};
 	my ($head, @hunk) = parse_diff($path);
 	for (@{$head->{TEXT}}) {
-		print;
+		print colorize_head_line($_);
 	}
 	$num = scalar @hunk;
 	$ix = 0;
@@ -617,7 +724,7 @@ sub patch_update_cmd {
 			$other .= '/s';
 		}
 		for (@{$hunk[$ix]{TEXT}}) {
-			print;
+			print colorize_hunk_line($_);
 		}
 		print "Stage this hunk [y/n/a/d$other/?]? ";
 		my $line = <STDIN>;
-- 
1.5.3.4

^ permalink raw reply related

* Re: [PATCH] Add color to git-add--interactive diffs
From: Tom Tobin @ 2007-10-14  8:38 UTC (permalink / raw)
  To: Git Mailing List
In-Reply-To: <1192350236.7226.6.camel@athena>

On Sun, 2007-10-14 at 03:24 -0500, Tom Tobin wrote:
> Seeing the recent discussion and code regarding adding color to
> git-add--interactive, I thought I'd throw in my recent attempt at
> colorizing the diffs.  (This doesn't handle anything else, such as the
> prompts.)

Crap, my apologies; Evolution inserted a spurious line break in there.

I'll repost the patch.

^ permalink raw reply

* [PATCH] Add color to git-add--interactive diffs
From: Tom Tobin @ 2007-10-14  8:23 UTC (permalink / raw)
  To: Git Mailing List

Seeing the recent discussion and code regarding adding color to
git-add--interactive, I thought I'd throw in my recent attempt at
colorizing the diffs.  (This doesn't handle anything else, such as the
prompts.)

After banging my head against parsing colorized output of git-add-files,
I gave up and implemented internal colorization keying off of the
color.diff configuration.

Hopefully this can be of some use towards fully colorizing
git-add--interactive; I'll admit up front that Perl isn't my primary
language, so I apologize in advance for whatever stupidities I've
introduced.  ;)

Signed-off-by: Tom Tobin <korpios@korpios.com>
---
 git-add--interactive.perl |  111
++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 109 insertions(+), 2 deletions(-)

diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index be68814..eeb38e6 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -1,5 +1,6 @@
 #!/usr/bin/perl -w
 
+use List::Util qw(first);
 use strict;
 
 sub run_cmd_pipe {
@@ -22,6 +23,112 @@ if (!defined $GIT_DIR) {
 }
 chomp($GIT_DIR);
 
+my ($use_color) = 0;
+my (%term_color_codes) = (
+	"normal", "", "black", "0", "red", "1",
+	"green", "2", "yellow", "3", "blue", "4",
+	"magenta", "5", "cyan", "6", "white", "7"
+);
+my (%term_attr_codes) = (
+	"bold", "1", "dim", "2", "ul", "4", "blink", "5", "reverse", "7"
+);
+my %colorconfig = (
+	'color.diff' => 'never',
+	'color.diff.plain' => '',
+	'color.diff.meta' => 'bold',
+	'color.diff.frag' => 'cyan',
+	'color.diff.old' => 'red',
+	'color.diff.new' => 'green',
+	'color.diff.commit' => 'yellow',
+	'color.diff.whitespace' => 'normal red'
+	);
+for (split("\n", `git-config --get-regexp '^color\.diff'`)) {
+	my ($var, $val) = $_ =~ /^([^\s]+)\s(.*)$/;
+	$colorconfig{$var} = $val;
+}
+if (first { $_ eq $colorconfig{'color.diff'} } ("true", "always",
"auto")) {
+	$use_color = 1;
+}
+
+sub parse_color {
+	my ($fg, $bg, $attr, $lookup);
+	my ($fg_code, $bg_code, $attr_code, $output_code) = ("", "", "", "");
+	my (@color) = @_;
+	my (@colorvals) = defined($color[0]) ? split(" ", $color[0]) : ();
+
+	for (@colorvals) {
+		$lookup = $term_color_codes{$_};
+		if (defined($lookup)) {
+			if (!defined($fg)) {
+				$fg = 1;
+				$fg_code = "3$lookup";
+			} elsif (!defined($bg)) {
+				$bg = 1;
+				$bg_code = "4$lookup";
+			} else {
+				die("Color slots only take up to two colors!");
+			}
+			next;
+		}
+		$lookup = $term_attr_codes{$_};
+		if (defined($lookup)) {
+			if (!defined($attr)) {
+				$attr = 1;
+				$attr_code = $lookup;
+			} else {
+				die("Color slots only take a single attribute!");
+			}
+		} else {
+			die("Unrecognized value for color slot!");
+		}
+	}
+	for ($fg_code, $bg_code, $attr_code) {
+		if ($_ eq "") {
+			next;
+		}
+		if ($output_code ne "") {
+			$output_code = $output_code . ";";
+		}
+		$output_code = $output_code . $_;
+	}
+	if (length($output_code)) {
+		return "\e[${output_code}m";
+	} else {
+		return "";
+	}
+}
+
+sub colorize_head_line {
+	my $line = shift @_;
+	if ($use_color) {
+		# git doesn't colorize these by default, soooo
+		# if ($line =~ /^\+/) {
+		#	 return parse_color($colorconfig{'color.diff.new'}) . "$line\e[m";
+		# }
+		# if ($line =~ /^-/) {
+		#	 return parse_color($colorconfig{'color.diff.old'}) . "$line\e[m";
+		# }
+		return parse_color($colorconfig{'color.diff.meta'}) . "$line\e[m";
+	}
+	return $line;
+}
+
+sub colorize_hunk_line {
+	my $line = shift @_;
+	if ($use_color) {
+		if ($line =~ /^\+/) {
+			return parse_color($colorconfig{'color.diff.new'}) . "$line\e[m";
+		}
+		if ($line =~ /^-/) {
+			return parse_color($colorconfig{'color.diff.old'}) . "$line\e[m";
+		}
+		if ($line =~ /^@@ /) {
+			return parse_color($colorconfig{'color.diff.frag'}) . "$line\e[m";
+		}
+	}
+	return $line;
+}
+
 sub refresh {
 	my $fh;
 	open $fh, 'git update-index --refresh |'
@@ -573,7 +680,7 @@ sub patch_update_cmd {
 	my $path = $it->{VALUE};
 	my ($head, @hunk) = parse_diff($path);
 	for (@{$head->{TEXT}}) {
-		print;
+		print colorize_head_line($_);
 	}
 	$num = scalar @hunk;
 	$ix = 0;
@@ -617,7 +724,7 @@ sub patch_update_cmd {
 			$other .= '/s';
 		}
 		for (@{$hunk[$ix]{TEXT}}) {
-			print;
+			print colorize_hunk_line($_);
 		}
 		print "Stage this hunk [y/n/a/d$other/?]? ";
 		my $line = <STDIN>;
-- 
1.5.3.4

^ permalink raw reply related

* Re: [PATCH 0/14] fork/exec removal series
From: Pierre Habouzit @ 2007-10-14  7:28 UTC (permalink / raw)
  To: Shawn O. Pearce, Johannes Schindelin, Johannes Sixt, gitster, git
In-Reply-To: <20071014071751.GC1198@artemis.corp>

[-- Attachment #1: Type: text/plain, Size: 1196 bytes --]

On dim, oct 14, 2007 at 07:17:51 +0000, Pierre Habouzit wrote:
> On dim, oct 14, 2007 at 07:12:39 +0000, Pierre Habouzit wrote:
> >   The trivial way is to add a __thread keyword to make them TLS
> > variables, though, it's not really a step in the direction of
> > portability, and last time I looked at it, mingw didn't had TLS support,
> > not sure if msys has. Though, if Msys has, it's worth using, and we
> 
>   Okay forget it, mingw and msys are one and the same *g*.
>   So well, maybe threading isn't such a so great idea :/

  And again last time I checked it was still a mingw 3.x in debian, now
that it's 4.2.1 it seems to support __thread (but not
__declspec(thread)) and their changelog seems to confirm that fact [0].

  So the question holds again, do we require pthread-using targets to
support TLS ? It feels sane and right to me, but …


  [0] http://sourceforge.net/project/shownotes.php?release_id=532062
      [...]
      * The  __thread keyword is honoured.
      [...]

-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: [PATCH 0/14] fork/exec removal series
From: Pierre Habouzit @ 2007-10-14  7:17 UTC (permalink / raw)
  To: Shawn O. Pearce, Johannes Schindelin, Johannes Sixt, gitster, git
In-Reply-To: <20071014071239.GB1198@artemis.corp>

[-- Attachment #1: Type: text/plain, Size: 642 bytes --]

On dim, oct 14, 2007 at 07:12:39 +0000, Pierre Habouzit wrote:
>   The trivial way is to add a __thread keyword to make them TLS
> variables, though, it's not really a step in the direction of
> portability, and last time I looked at it, mingw didn't had TLS support,
> not sure if msys has. Though, if Msys has, it's worth using, and we

  Okay forget it, mingw and msys are one and the same *g*.
  So well, maybe threading isn't such a so great idea :/

-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: [PATCH 0/14] fork/exec removal series
From: Pierre Habouzit @ 2007-10-14  7:12 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: Johannes Schindelin, Johannes Sixt, gitster, git
In-Reply-To: <20071014025857.GQ27899@spearce.org>

[-- Attachment #1: Type: text/plain, Size: 1945 bytes --]

On Sun, Oct 14, 2007 at 02:58:57AM +0000, Shawn O. Pearce wrote:
> Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > On Sat, 13 Oct 2007, Shawn O. Pearce wrote:
> > 
> > > Since builtin-pack-objects now accepts (limited) pthread support, 
> > > perhaps this should be implemented in terms of pthread support when 
> > > pthreads are available?
> > 
> > Falling back to fork() when no pthreads are available?  Yes, that makes 
> > sense.
> > 
> > It might also (marginally) speed up operations, since the switches between 
> > threads are cheaper than those between processes, right?
> 
> Usually.  If we have a large virtual address space (say due to
> opening a bunch of packfiles and reading commits out of them into
> struct commit* thingies) and the OS does a giant copy of the page
> tables during fork() then the pthread creation should be a heck of
> a lot cheaper.
> 
> But we most definately *must* continue to support fork() for the
> async functions.  Its the most common interface available on one
> of our biggest platforms (UNIX).

  Yeah that, and the fact that many of the git modules aren't
thread-safe (some modules have static buffers strbuf's or caching
variables) and should be used with care.

  The trivial way is to add a __thread keyword to make them TLS
variables, though, it's not really a step in the direction of
portability, and last time I looked at it, mingw didn't had TLS support,
not sure if msys has. Though, if Msys has, it's worth using, and we
could require that targets using the fancy pthread thingy should also
have some fancy TLS, or use fork().

  Portability for such issues, would be to use pthread_key_* and
pthread_{get,set}specific, and those are a hell of a sucky API.

-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: [PATCH] Add a simple option parser.
From: Pierre Habouzit @ 2007-10-14  7:02 UTC (permalink / raw)
  To: Alex Riesen; +Cc: git, Junio C Hamano
In-Reply-To: <20071013221450.GC2875@steel.home>

[-- Attachment #1: Type: text/plain, Size: 1238 bytes --]

On Sat, Oct 13, 2007 at 10:14:50PM +0000, Alex Riesen wrote:
> Pierre Habouzit, Sat, Oct 13, 2007 22:54:04 +0200:
> > On Sat, Oct 13, 2007 at 07:16:55PM +0000, Alex Riesen wrote:
> > > Pierre Habouzit, Sat, Oct 13, 2007 15:29:03 +0200:
> > > BTW, if you just printed the usage message out (it is about usage of a
> > > program, isn't it?) and called exit() everyone would be just as happy.
> > > And you wouldn't have to include strbuf (it is the only use of it),
> > > less code, too. It'd make simplier to stea^Wcopy your implementation,
> > > which I like :)
> > 
> >   the reason is that usage() is a wrapper around a callback, and I
> > suppose it's used by some GUI's or anything like that.
> 
> It is not. Not yet. What could they use a usage text for?
> Besides, you could just export the callback (call_usage_callback or
> something) from usage.c and call it.

  Okay makes sense.

> >   FWIW you can rework the .c like this:
> 
> on top of yours:

  Added (reworked a bit for the current state of parse_options), and pushed.

-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: Git User's Survey 2007 unfinished summary continued
From: Linus Torvalds @ 2007-10-14  3:55 UTC (permalink / raw)
  To: david
  Cc: Shawn O. Pearce, Johannes Schindelin, J. Bruce Fields,
	Jakub Narebski, git
In-Reply-To: <Pine.LNX.4.64.0710132037290.30704@asgard.lang.hm>



On Sat, 13 Oct 2007, david@lang.hm wrote:
>
> I'll also point out that being a 'productive member of society' may have a
> wider definition then you may think initially.

I actually meant it in the absolutely most narrow possible meaning: you 
take the least productive person imaginable, who is certainly not going to 
do anything at all, and in the end, who cares? It's not like nonproductive 
people really hurt.

Some people in the open source / free software world get really upset 
about "freeloaders". I think that's silly. First off, I agree with you 
that a lot of people don't even end up being freeloaders - even if you 
never code a single line of code, there are ton of ways to be usefully 
involved (and some of them will be entirely invisible to any developer - 
helping random people outside the development lists, for example).

But more importantly, even somebody who really isn't productive at all 
generally can't be messing things up either - so it's a nonissue. Unless 
it results in tons of flaming ...

		Linus

^ permalink raw reply

* Re: Git User's Survey 2007 unfinished summary continued
From: david @ 2007-10-14  3:43 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Shawn O. Pearce, Johannes Schindelin, J. Bruce Fields,
	Jakub Narebski, git
In-Reply-To: <alpine.LFD.0.999.0710132011270.6887@woody.linux-foundation.org>

On Sat, 13 Oct 2007, Linus Torvalds wrote:

> But at the same time, just accepting that there are people who will
> potentially never really be productive members of society (whether
> "society" is git or something bigger), is probably a good idea. They
> aren't worth complaining about: they don't generally tend to take anything
> away from the community unless the community itself reacts negatively to
> them.

I'll also point out that being a 'productive member of society' may have a 
wider definition then you may think initially.

is a sysadmin who never contribures a line of code, but switches hundreds 
of servers to linux and assists friends in migrating to Linux a productive 
member? he doesn't contribute any code, so some people would say no, but 
in spreading the use he is increasing the number of potential contributers 
so others would say yes.

keep this in mind before you assume that someone isn't worth anything.

David Lang

^ permalink raw reply

* Re: Git User's Survey 2007 unfinished summary continued
From: Linus Torvalds @ 2007-10-14  3:15 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: Johannes Schindelin, J. Bruce Fields, Jakub Narebski, git
In-Reply-To: <20071014014445.GN27899@spearce.org>



On Sat, 13 Oct 2007, Shawn O. Pearce wrote:
> 
> But just saying "MY GOD FIX THE UI" is not a wishlist item (yes,
> that was a real survey answer).  It provides the community no
> chance to understand what parts of the UI we need to work on, and
> what parts the end-user is OK with or just hasn't even tried to use.

Heh. I do agree that some people just ask for unreasonable or stupid 
things (or maybe they are just really bad at explaining them, and may have 
something non-stupid in mind but just cannot articulate it).

And I also agree that there are tons of people who are just lazy and don't 
even bother to try to explain themselves.

And I'll flame people myself. I can't even say that's a rare event. So I 
shouldn't throw _too_ many stones, or one of them might bounce back. 

But at the same time, just accepting that there are people who will 
potentially never really be productive members of society (whether 
"society" is git or something bigger), is probably a good idea. They 
aren't worth complaining about: they don't generally tend to take anything 
away from the community unless the community itself reacts negatively to 
them.

			Linus

^ permalink raw reply

* Re: [PATCH 14/14] Use the asyncronous function infrastructure to run the content filter.
From: Johannes Schindelin @ 2007-10-14  3:07 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: gitster, git
In-Reply-To: <1192305984-22594-15-git-send-email-johannes.sixt@telecom.at>

Hi,

On Sat, 13 Oct 2007, Johannes Sixt wrote:

>  	status = finish_command(&child_process);
>  	if (status)
> -		error("external filter %s failed %d", cmd, -status);
> +		error("external filter %s failed", params->cmd);

Did you mean to remove the status from the output (it should probably read 
"(exit status %d)" instead of just "%d", but an exit status can help 
identify problems, right?


> -	child_process.pid = fork();
> -	if (child_process.pid < 0) {
> -		error("cannot fork to run external filter %s", cmd);
> -		close(pipe_feed[0]);
> -		close(pipe_feed[1]);
> -		return NULL;
> -	}
> -	if (!child_process.pid) {
> -		close(pipe_feed[0]);
> -		exit(filter_buffer(pipe_feed[1], src, *sizep, cmd));
> -	}
> -	close(pipe_feed[1]);
> +	if (start_async(&async))
> +		return 0;	/* error was already reported */

Please write "return NULL;"

Thanks,
Dscho

^ permalink raw reply

* Re: [PATCH 0/14] fork/exec removal series
From: Shawn O. Pearce @ 2007-10-14  2:58 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Johannes Sixt, gitster, git
In-Reply-To: <Pine.LNX.4.64.0710140348550.25221@racer.site>

Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> On Sat, 13 Oct 2007, Shawn O. Pearce wrote:
> 
> > Since builtin-pack-objects now accepts (limited) pthread support, 
> > perhaps this should be implemented in terms of pthread support when 
> > pthreads are available?
> 
> Falling back to fork() when no pthreads are available?  Yes, that makes 
> sense.
> 
> It might also (marginally) speed up operations, since the switches between 
> threads are cheaper than those between processes, right?

Usually.  If we have a large virtual address space (say due to
opening a bunch of packfiles and reading commits out of them into
struct commit* thingies) and the OS does a giant copy of the page
tables during fork() then the pthread creation should be a heck of
a lot cheaper.

But we most definately *must* continue to support fork() for the
async functions.  Its the most common interface available on one
of our biggest platforms (UNIX).

-- 
Shawn.

^ permalink raw reply

* Re: [PATCH 0/14] fork/exec removal series
From: Johannes Schindelin @ 2007-10-14  2:50 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: Johannes Sixt, gitster, git
In-Reply-To: <20071014021149.GO27899@spearce.org>

Hi,

On Sat, 13 Oct 2007, Shawn O. Pearce wrote:

> Since builtin-pack-objects now accepts (limited) pthread support, 
> perhaps this should be implemented in terms of pthread support when 
> pthreads are available?

Falling back to fork() when no pthreads are available?  Yes, that makes 
sense.

It might also (marginally) speed up operations, since the switches between 
threads are cheaper than those between processes, right?

Ciao,
Dscho

^ permalink raw reply

* Re: [PATCH 0/14] fork/exec removal series
From: Shawn O. Pearce @ 2007-10-14  2:11 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: gitster, git
In-Reply-To: <1192305984-22594-1-git-send-email-johannes.sixt@telecom.at>

Johannes Sixt <johannes.sixt@telecom.at> wrote:
> here is a series of patches that removes a number fork/exec pairs.
...
> The series consists of 2 parts:
> 
> - The first half replaces a number of fork/exec pairs by start_command/
>   finish_command or run_command.
> 
> - The second half introduces a new framework that runs a function
>   asynchronously. New functions start_async and finish_async are implemented
>   similarly to start_command and run_command. They are used to replace
>   occurrences of fork() that does not exec() in the child. Such code
>   could in principle be run in a thread, and on MinGW port we will go this
>   route, but on Posix we stay with fork().

This series looks pretty good to me.  I like seeing huge blocks
go away only to be replaced with the simple API offered by
run-command.h.  Makes the result much easier to follow.

The async interface is also quite simple.  Unfortunately there
is some risk with the canonical fork() implementation in that the
async routine might attempt to alter global data that the parent
is also using, and folks on a good UNIX that is using the fork()
implementation will not even notice as they are in totally separated
address spaces.  But you'll see it in MSYS Git.

Since builtin-pack-objects now accepts (limited) pthread support,
perhaps this should be implemented in terms of pthread support
when pthreads are available?  Most Linux/BSD/Mac OS X systems do
have pthreads these days and that's the majority of git users and
developers.  This would make it more likely that bugs in this sort
of code would be detected early.  Just a thought.
 
>  13 files changed, 334 insertions(+), 369 deletions(-)

Hard to argue with that final state.  You killed 35 lines and
also made Git easier to port to "that OS unfortunately named after
transparent glass thingies".

-- 
Shawn.

^ permalink raw reply

* Re: Git User's Survey 2007 unfinished summary continued
From: Johannes Schindelin @ 2007-10-14  2:06 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: J. Bruce Fields, Jakub Narebski, git
In-Reply-To: <alpine.LFD.0.999.0710131810550.6887@woody.linux-foundation.org>

Hi,

On Sat, 13 Oct 2007, Linus Torvalds wrote:

> On Sun, 14 Oct 2007, Johannes Schindelin wrote:
> >
> > My main point is -- and always was -- that I'd like people to realise 
> > how much it depends on _them_ if (and when) their wishes come true.
> 
> Dscho, that's just not fair.
> 
> The fact is, stating what you wish for *is* taking an action. Starting 
> to complain about people stating their wishes (which you have done 
> several times) is simply unreasonable.

Well, maybe I overreacted.

> You don't have to *do* what they wish for, but I really wish you stopped 
> complaining about people bringing up their hopes for improvement.

Fair enough, I'll shut up about these issues.

At least as long as I can hold my breath ;-)

> Complain about it when somebody asks for something *stupid*. Explain why 
> it would be wrong to do something like that. But don't complain about 
> people having wish-lists, even if those people may not work on them.
> 
> Not everybody is a "doer". It's important to get input from people who are 
> just plain users, or hope to be.

A pity, but you're probably right.

Ciao,
Dscho

^ permalink raw reply

* Re: Git User's Survey 2007 unfinished summary continued
From: Shawn O. Pearce @ 2007-10-14  1:44 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Johannes Schindelin, J. Bruce Fields, Jakub Narebski, git
In-Reply-To: <alpine.LFD.0.999.0710131810550.6887@woody.linux-foundation.org>

Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Sun, 14 Oct 2007, Johannes Schindelin wrote:
> >
> > My main point is -- and always was -- that I'd like people to realise how 
> > much it depends on _them_ if (and when) their wishes come true.
> 
> Dscho, that's just not fair.
...
> Complain about it when somebody asks for something *stupid*. Explain why 
> it would be wrong to do something like that. But don't complain about 
> people having wish-lists, even if those people may not work on them.
> 
> Not everybody is a "doer". It's important to get input from people who are 
> just plain users, or hope to be.

I agree with both of you.  My understanding of Dscho's original
comment was that people weren't saying *what* specifically their
wish-list was, which means we have no hope as a community of meeting
their requests.

Carl and Andy both had submitted a long list of very specific issues
that they had with Git.  The result of those lists being posted was
a number of people contributed improvements that lead us to 1.5.
Nobody can argue with that.

But just saying "MY GOD FIX THE UI" is not a wishlist item (yes,
that was a real survey answer).  It provides the community no
chance to understand what parts of the UI we need to work on, and
what parts the end-user is OK with or just hasn't even tried to use.

-- 
Shawn.

^ permalink raw reply

* Re: Git User's Survey 2007 unfinished summary continued
From: Linus Torvalds @ 2007-10-14  1:13 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: J. Bruce Fields, Jakub Narebski, git
In-Reply-To: <Pine.LNX.4.64.0710140135020.25221@racer.site>



On Sun, 14 Oct 2007, Johannes Schindelin wrote:
>
> My main point is -- and always was -- that I'd like people to realise how 
> much it depends on _them_ if (and when) their wishes come true.

Dscho, that's just not fair.

The fact is, stating what you wish for *is* taking an action. Starting to 
complain about people stating their wishes (which you have done several 
times) is simply unreasonable.

You don't have to *do* what they wish for, but I really wish you stopped 
complaining about people bringing up their hopes for improvement.

Complain about it when somebody asks for something *stupid*. Explain why 
it would be wrong to do something like that. But don't complain about 
people having wish-lists, even if those people may not work on them.

Not everybody is a "doer". It's important to get input from people who are 
just plain users, or hope to be.

		Linus

^ permalink raw reply

* Re: [PATCH 01/14] Change git_connect() to return a struct child_process instead of a pid_t.
From: Johannes Schindelin @ 2007-10-14  0:57 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: gitster, git
In-Reply-To: <1192305984-22594-2-git-send-email-johannes.sixt@telecom.at>

Hi,

On Sat, 13 Oct 2007, Johannes Sixt wrote:

> -int finish_connect(pid_t pid)
> +int finish_connect(struct child_process *conn)
>  {
> -	if (pid == 0)
> +	if (conn == NULL)
>  		return 0;
>  
> -	while (waitpid(pid, NULL, 0) < 0) {
> +	while (waitpid(conn->pid, NULL, 0) < 0) {
>  		if (errno != EINTR)
>  			return -1;

Just for completeness' sake: could you do a free(conn); before return -1;?

Thanks,
Dscho

^ permalink raw reply

* Re: Addition of "xmlto" to install documentation
From: Johannes Schindelin @ 2007-10-14  0:43 UTC (permalink / raw)
  To: Markus Elfring; +Cc: git
In-Reply-To: <47112DAA.5080701@web.de>

Hi,

On Sat, 13 Oct 2007, Markus Elfring wrote:

> I have cloned the current Git release to my computer. I resolved all 
> dependencies that were mentioned in the file "INSTALL". But when I've 
> tried "make install install-doc" I got the message that "xmlto" was not 
> found on my openSUSE 10.3 system. (I have installed it now.) Would you 
> like to add this tool to the system requirements in the documentation?

Well, it is not strictly necessary to build git, and not even to install 
it, if you have the "man" branch.

Ciao,
Dscho

^ permalink raw reply

* Re: Git User's Survey 2007 unfinished summary continued
From: Johannes Schindelin @ 2007-10-14  0:36 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Jakub Narebski, git
In-Reply-To: <20071013202713.GA2467@fieldses.org>

Hi,

On Sat, 13 Oct 2007, J. Bruce Fields wrote:

> On Sat, Oct 13, 2007 at 09:59:41PM +0200, David Kastrup wrote:
> > Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> > 
> ...survey quote:
> > >>    Figure out why people find git hard to learn and eliminate those
> > >>    barriers to entry.  Make git more task-oriented rather than
> > >>    data-model-oriented the way it is now.
> > >
> > > Frankly, expectations like these make me want to bang somebody's
> > > head on the wall.
> > 
> > And you wonder that people are unwilling to ask for things on the
> > list?

That is utter rubbish.

> Well, he does have a point that they could have been more specific.
> 
> But, yes, "I wish we could get people to be more specific" might be the 
> better way to put it.

Yes, there are politer ways to phrase it.

My main point is -- and always was -- that I'd like people to realise how 
much it depends on _them_ if (and when) their wishes come true.

Ciao,
Dscho

^ permalink raw reply

* Re: Imports without Tariffs
From: Michael Witten @ 2007-10-13 23:04 UTC (permalink / raw)
  To: git; +Cc: Jeff King
In-Reply-To: <20071013075723.GA27533@coredump.intra.peff.net>


On 13 Oct 2007, at 3:57:23 AM, Jeff King wrote:

> On Sat, Oct 13, 2007 at 12:30:09AM -0400, Michael Witten wrote:
>
>>> except that git-rebase is smart enough to realize that C == C'  
>>> and skip
>>> it (so it's a "safe" way of moving forward).
>>
>> This is good to know! The documentation should mention this case!
>
> Yes, it probably should. Can you submit a patch describing the  
> behavior
> where you think it ought to go?

I can make a patch, but at the moment I'm swamped and I don't want to  
think
about doing that.

I'll get around to it eventually, I hope.

Do I just submit the patch to this list? How do I know it will be used?

>> Basically, the imported cvs history should be treated like
>> a remote that's being tracked. It seems like the solution
>> I proposed kind of does this and would work for other SCM
>> imports too.
>
> I think it's an interesting avenue to pursue, though I would worry a
> little about robustness. I like the fact that after rebasing, the
> commits have done a complete git->cvs->git loop and look identical

Frankly, I don't know how robust my idea is either, but it's simple
enough not to have many problems lurking in the shadows.

It would certainly be more useful than not.

> As an alternate idea, why not try to have the CVS commit contain all
> information necessary to create a particular git commit. IOW, describe
> all of the data that goes into the commit hash as textual comments in
> the CVS commit (committer name/time, author name/time). And then
> theoretically git-cvsimport can reconstruct the exact same commits
> again, and your git->cvs->git merge really _will_ be a fastforward.

I considered this too, but this exposes what we're doing. We don't
want the old farts to wonder what all these hash thingies are.

Michael Witten

^ permalink raw reply

* Re: [PATCH] Fixing path quoting issues
From: Andreas Ericsson @ 2007-10-13 22:36 UTC (permalink / raw)
  To: Jonathan del Strother; +Cc: Johannes Sixt, git, Junio C Hamano
In-Reply-To: <92879AC5-2927-439B-8EB0-AC20AAEE412E@steelskies.com>

Jonathan del Strother wrote:
> On 11 Oct 2007, at 07:19, Johannes Sixt wrote:
> 
>>> -     git-commit -F msg -m amending ."
>>> +    git-commit -F msg -m amending ."
>>
>> You fix whitespace...
>>
>>>  test_expect_success \
>>> -    "using message from other commit" \
>>> -    "git-commit -C HEAD^ ."
>>> +     "using message from other commit" \
>>> +     "git-commit -C HEAD^ ."
>>
>> ... and you break it. More of these follow. Don't do that, it makes 
>> patch review unnecessarily hard.
> 
> 
> I'm just preparing to release this patch... was that "don't break 
> whitespace", or "don't try to fix whitespace in a patch that's has 
> nothing to do with whitespacing-fixing" ?
> 

Both, I think ;-)

> And while I'm here - tabs are preferred, are they?  There seem to be a 
> mixture of tabs & 4 space indentation.

1 hard tab / level of indent, but use spaces for continuation alignment.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply

* Re: Addition of "xmlto" to install documentation
From: Alex Riesen @ 2007-10-13 22:29 UTC (permalink / raw)
  To: Markus Elfring; +Cc: git
In-Reply-To: <47112DAA.5080701@web.de>

Markus Elfring, Sat, Oct 13, 2007 22:42:18 +0200:
> 
> I have cloned the current Git release to my computer. I resolved all
> dependencies that were mentioned in the file "INSTALL". But when I've
> tried "make install install-doc" I got the message that "xmlto" was not
> found on my openSUSE 10.3 system. (I have installed it now.)
> Would you like to add this tool to the system requirements in the
> documentation?
> 

It is already there, in the same INSTALL file:

 - To build and install documentation suite, you need to have
   the asciidoc/xmlto toolchain.  Because not many people are
   inclined to install the tools, the default build target
   ("make all") does _not_ build them.

^ permalink raw reply

* Re: [PATCH] Color support added to git-add--interactive.
From: Jean-Luc Herren @ 2007-10-13 22:23 UTC (permalink / raw)
  To: Dan Z, git
In-Reply-To: <cff973550710131450r3b54a328k8db97488f4b50e2a@mail.gmail.com>

Dan Z wrote:
> I think color.add is better, because git-add--interactive goes beyond
> coloring diffs. When this is complete, it should probably use
> color.diff.<slot> for the actual diff output, and color.add.<slot> for
> colored prompts/commands.

Or maybe rather color.interactive.<slot>, where <slot> could be
'prompt', 'header', etc.  It's better to give it a name that
describes what it is for, instead of one that describes which tool
uses it.  This way it could possibly be used for other potential
interactive tools in the future.

jlh

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox