Git development
 help / color / mirror / Atom feed
* [PATCH] Makefile: add clean-obsolete-scripts target
@ 2007-01-10 12:20 Johannes Schindelin
  2007-01-10 12:53 ` Alex Riesen
  2007-01-10 20:22 ` Junio C Hamano
  0 siblings, 2 replies; 10+ messages in thread
From: Johannes Schindelin @ 2007-01-10 12:20 UTC (permalink / raw)
  To: git, junkio


On Cygwin, newly builtins are not recognized, because there exist both
the executable binaries (with .exe extension) _and_ the now-obsolete
scripts (without extension), but the script is executed.

"make clean-obsolete-scripts" removes these ambiguities by removing the
older of these file pairs.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
 Makefile |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile
index 007ceb2..a46683a 100644
--- a/Makefile
+++ b/Makefile
@@ -905,6 +905,25 @@ dist-doc:
 
 ### Cleaning rules
 
+clean-obsolete-scripts:
+	@if test -n "$X"; \
+	then \
+		ls *$X '$(DESTDIR_SQ)$(gitexecdir_SQ)'/*$X | while read f; do \
+			script="`echo "$$f" | sed 's/$X\$$/./'`"; \
+			if test -f "$$script"; \
+			then \
+				if test "$$script" -ot "$$f"; \
+				then \
+					echo removing "$$script"; \
+					rm "$$script"; \
+				else \
+					echo removing "$$f"; \
+					rm "$$f"; \
+				fi; \
+			fi; \
+		done; \
+	fi
+
 clean:
 	rm -f *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o xdiff/*.o \
 		$(LIB_FILE) $(XDIFF_LIB)
-- 
1.4.4.4.g774d-dirty

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-10 12:20 [PATCH] Makefile: add clean-obsolete-scripts target Johannes Schindelin
@ 2007-01-10 12:53 ` Alex Riesen
  2007-01-10 13:42   ` Johannes Schindelin
  2007-01-10 20:22 ` Junio C Hamano
  1 sibling, 1 reply; 10+ messages in thread
From: Alex Riesen @ 2007-01-10 12:53 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, junkio

On 1/10/07, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
>
> On Cygwin, newly builtins are not recognized, because there exist both
> the executable binaries (with .exe extension) _and_ the now-obsolete
> scripts (without extension), but the script is executed.
>
> "make clean-obsolete-scripts" removes these ambiguities by removing the
> older of these file pairs.

Not enough. You have to cleanup the build directory too,
otherwise tests fail, and git-hacking on git itself is ... complicated.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-10 12:53 ` Alex Riesen
@ 2007-01-10 13:42   ` Johannes Schindelin
  2007-01-10 13:52     ` Alex Riesen
  0 siblings, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2007-01-10 13:42 UTC (permalink / raw)
  To: Alex Riesen; +Cc: git, junkio

Hi,

On Wed, 10 Jan 2007, Alex Riesen wrote:

> On 1/10/07, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > 
> > On Cygwin, newly builtins are not recognized, because there exist both
> > the executable binaries (with .exe extension) _and_ the now-obsolete
> > scripts (without extension), but the script is executed.
> > 
> > "make clean-obsolete-scripts" removes these ambiguities by removing the
> > older of these file pairs.
> 
> Not enough. You have to cleanup the build directory too,
> otherwise tests fail, and git-hacking on git itself is ... complicated.

Doesn't it handle that?

	ls *$X '$(DESTDIR_SQ)$(gitexecdir_SQ)'/*$X

Note the first "*$X". It really should pick up on all executables in the 
build directory. Or do I miss something?

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-10 13:42   ` Johannes Schindelin
@ 2007-01-10 13:52     ` Alex Riesen
  0 siblings, 0 replies; 10+ messages in thread
From: Alex Riesen @ 2007-01-10 13:52 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, junkio

On 1/10/07, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > Not enough. You have to cleanup the build directory too,
> > otherwise tests fail, and git-hacking on git itself is ... complicated.
>
> Doesn't it handle that?
>
>         ls *$X '$(DESTDIR_SQ)$(gitexecdir_SQ)'/*$X
>
> Note the first "*$X". It really should pick up on all executables in the
> build directory. Or do I miss something?

No-no, sorry. I didn't noticed the first *$X, which will of course catch the
execs in the current directory.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-10 12:20 [PATCH] Makefile: add clean-obsolete-scripts target Johannes Schindelin
  2007-01-10 12:53 ` Alex Riesen
@ 2007-01-10 20:22 ` Junio C Hamano
  2007-01-10 21:26   ` Alex Riesen
  2007-01-11  8:22   ` Johannes Schindelin
  1 sibling, 2 replies; 10+ messages in thread
From: Junio C Hamano @ 2007-01-10 20:22 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> On Cygwin, newly builtins are not recognized, because there exist both
> the executable binaries (with .exe extension) _and_ the now-obsolete
> scripts (without extension), but the script is executed.
>
> "make clean-obsolete-scripts" removes these ambiguities by removing the
> older of these file pairs.

I would prefer it to be rather automatic -- how about this instead?

-- >8 --
diff --git a/Makefile b/Makefile
index e4f520a..9077941 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 # The default target of this Makefile is...
-all:
+all::
 
 # Define NO_OPENSSL environment variable if you do not have OpenSSL.
 # This also implies MOZILLA_SHA1.
@@ -605,9 +605,12 @@ export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir
 
 ### Build rules
 
-all: $(ALL_PROGRAMS) $(BUILT_INS) git$X gitk gitweb/gitweb.cgi
+all:: $(ALL_PROGRAMS) $(BUILT_INS) git$X gitk gitweb/gitweb.cgi
+ifneq (,$X)
+	$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), echo rm -f '$p';) 
+endif
 
-all:
+all::
 	$(MAKE) -C perl PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
 	$(MAKE) -C templates
 
@@ -849,6 +852,9 @@ install: all
 			'$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X'; \
 	fi
 	$(foreach p,$(BUILT_INS), rm -f '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;)
+ifneq (,$X)
+	$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), echo rm -f '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p';) 
+endif
 
 install-doc:
 	$(MAKE) -C Documentation install

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-10 20:22 ` Junio C Hamano
@ 2007-01-10 21:26   ` Alex Riesen
  2007-01-11  0:34     ` Junio C Hamano
  2007-01-11  8:22   ` Johannes Schindelin
  1 sibling, 1 reply; 10+ messages in thread
From: Alex Riesen @ 2007-01-10 21:26 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Schindelin, git

On 1/10/07, Junio C Hamano <junkio@cox.net> wrote:
>
> I would prefer it to be rather automatic -- how about this instead?
>
...
> +ifneq (,$X)

Perfect! :)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-10 21:26   ` Alex Riesen
@ 2007-01-11  0:34     ` Junio C Hamano
  2007-01-11 21:41       ` Alex Riesen
  0 siblings, 1 reply; 10+ messages in thread
From: Junio C Hamano @ 2007-01-11  0:34 UTC (permalink / raw)
  To: Alex Riesen; +Cc: git

"Alex Riesen" <raa.lkml@gmail.com> writes:

> On 1/10/07, Junio C Hamano <junkio@cox.net> wrote:
>>
>> I would prefer it to be rather automatic -- how about this instead?
>>
> ...
>> +ifneq (,$X)
>
> Perfect! :)

Heh, you couldn't have tested -- I still had "echo rm -f" in the
patch ;-).

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-10 20:22 ` Junio C Hamano
  2007-01-10 21:26   ` Alex Riesen
@ 2007-01-11  8:22   ` Johannes Schindelin
  2007-01-11  8:32     ` Johannes Schindelin
  1 sibling, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2007-01-11  8:22 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi,

On Wed, 10 Jan 2007, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > On Cygwin, newly builtins are not recognized, because there exist both
> > the executable binaries (with .exe extension) _and_ the now-obsolete
> > scripts (without extension), but the script is executed.
> >
> > "make clean-obsolete-scripts" removes these ambiguities by removing the
> > older of these file pairs.
> 
> I would prefer it to be rather automatic -- how about this instead?

I like your method better. However, does it execute an rm -f for _every_ 
builtin, even if it does not exist? This is a huge performance eater on 
cygwin. Every fork() is _expensive_.

Even worse: are you sure that it does not remove the _builtins_? Maybe you 
noticed that I asked for "git-bla." instead of "git-bla", since the latter 
will happily access "git-bla.exe" (at least when you do an "ls git-bla" 
and "git-bla.exe" exists, but not "git-bla", it _will_ show 
the metadata of "git-bla.exe", but with the name "git-bla").

Will test.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-11  8:22   ` Johannes Schindelin
@ 2007-01-11  8:32     ` Johannes Schindelin
  0 siblings, 0 replies; 10+ messages in thread
From: Johannes Schindelin @ 2007-01-11  8:32 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi,

On Thu, 11 Jan 2007, Johannes Schindelin wrote:

> On Wed, 10 Jan 2007, Junio C Hamano wrote:
> 
> > Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> > 
> > > On Cygwin, newly builtins are not recognized, because there exist both
> > > the executable binaries (with .exe extension) _and_ the now-obsolete
> > > scripts (without extension), but the script is executed.
> > >
> > > "make clean-obsolete-scripts" removes these ambiguities by removing the
> > > older of these file pairs.
> > 
> > I would prefer it to be rather automatic -- how about this instead?
> 
> I like your method better. However, does it execute an rm -f for _every_ 
> builtin, even if it does not exist? This is a huge performance eater on 
> cygwin. Every fork() is _expensive_.
> 
> Even worse: are you sure that it does not remove the _builtins_? Maybe you 
> noticed that I asked for "git-bla." instead of "git-bla", since the latter 
> will happily access "git-bla.exe" (at least when you do an "ls git-bla" 
> and "git-bla.exe" exists, but not "git-bla", it _will_ show 
> the metadata of "git-bla.exe", but with the name "git-bla").
> 
> Will test.

Okay, I tested. And it works, indeed. No idea why, though. And while it 
looks a bit strange [*1*], the performance is not as bad as I expected.

Ciao,
Dscho

[*1*]

$ make
[...]
rm -f git-pack-refs.exe && ln git.exe git-pack-refs.exe
rm -f 'git-convert-objects';  rm -f 'git-fetch-pack';  rm -f 
'git-fsck-objects';  rm -f 'git-hash-object';  rm -f 'git-index-pack';  rm 
-f 'git-local-fetch';  rm -f 'git-daemon';  rm -f 'git-merge-index';  rm 
-f 'git-mktag';  rm -f 'git-mktree';  rm -f 'git-patch-id';  rm -f 
'git-peek-remote';  rm -f 'git-receive-pack';  rm -f 'git-send-pack';  rm 
-f 'git-shell';  rm -f 'git-show-index';  rm -f 'git-ssh-fetch';  rm -f 
'git-ssh-upload';  rm -f 'git-unpack-file';  rm -f 
'git-update-server-info';  rm -f 'git-upload-pack';  rm -f 
'git-verify-pack';  rm -f 'git-pack-redundant';  rm -f 'git-var';  rm -f 
'git-merge-tree';  rm -f 'git-imap-send';  rm -f 'git-merge-recursive';  
rm -f 'git-ssh-pull';  rm -f 'git-ssh-push';  rm -f 'git-http-fetch';  rm 
-f 'git-http-push';  rm -f 'git-merge-recur';  rm -f 'git-format-patch';  
rm -f 'git-show';  rm -f 'git-whatchanged';  rm -f 'git-cherry';  rm -f 
'git-get-tar-commit-id';  rm -f 'git-init';  rm -f 'git-add';  rm -f 
'git-annotate';  rm -f 'git-apply';  rm -f 'git-archive';  rm -f 
'git-blame';  rm -f 'git-branch';  rm -f 'git-cat-file';  rm -f 
'git-checkout-index';  rm -f 'git-check-ref-format';  rm -f 
'git-commit-tree';  rm -f 'git-count-objects';  rm -f 'git-describe';  rm 
-f 'git-diff';  rm -f 'git-diff-files';  rm -f 'git-diff-index';  rm -f 
'git-diff-stages';  rm -f 'git-diff-tree';  rm -f 'git-fmt-merge-msg';  rm 
-f 'git-for-each-ref';  rm -f 'git-grep';  rm -f 'git-init-db';  rm -f 
'git-log';  rm -f 'git-ls-files';  rm -f 'git-ls-tree';  rm -f 
'git-mailinfo';  rm -f 'git-mailsplit';  rm -f 'git-merge-base';  rm -f 
'git-merge-file';  rm -f 'git-mv';  rm -f 'git-name-rev';  rm -f 
'git-pack-objects';  rm -f 'git-prune';  rm -f 'git-prune-packed';  rm -f 
'git-push';  rm -f 'git-read-tree';  rm -f 'git-reflog';  rm -f 
'git-repo-config';  rm -f 'git-rerere';  rm -f 'git-rev-list';  rm -f 
'git-rev-parse';  rm -f 'git-rm';  rm -f 'git-runstatus';  rm -f 
'git-shortlog';  rm -f 'git-show-branch';  rm -f 'git-stripspace';  rm -f 
'git-symbolic-ref';  rm -f 'git-tar-tree';  rm -f 'git-unpack-objects';  
rm -f 'git-update-index';  rm -f 'git-update-ref';  rm -f 
'git-upload-archive';  rm -f 'git-verify-pack';  rm -f 'git-write-tree';  
rm -f 'git-show-ref';  rm -f 'git-pack-refs';  rm -f 'git';
[...]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Makefile: add clean-obsolete-scripts target
  2007-01-11  0:34     ` Junio C Hamano
@ 2007-01-11 21:41       ` Alex Riesen
  0 siblings, 0 replies; 10+ messages in thread
From: Alex Riesen @ 2007-01-11 21:41 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Junio C Hamano, Thu, Jan 11, 2007 01:34:41 +0100:
> >> I would prefer it to be rather automatic -- how about this instead?
> > ...
> >> +ifneq (,$X)
> >
> > Perfect! :)
> 
> Heh, you couldn't have tested -- I still had "echo rm -f" in the
> patch ;-).

Didn't. Just liked the approach :)

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2007-01-11 21:41 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-01-10 12:20 [PATCH] Makefile: add clean-obsolete-scripts target Johannes Schindelin
2007-01-10 12:53 ` Alex Riesen
2007-01-10 13:42   ` Johannes Schindelin
2007-01-10 13:52     ` Alex Riesen
2007-01-10 20:22 ` Junio C Hamano
2007-01-10 21:26   ` Alex Riesen
2007-01-11  0:34     ` Junio C Hamano
2007-01-11 21:41       ` Alex Riesen
2007-01-11  8:22   ` Johannes Schindelin
2007-01-11  8:32     ` Johannes Schindelin

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