* How to fix (and find) many git-* --check errors?
@ 2008-08-08 12:49 "Peter Valdemar Mørch (Lists)"
2008-08-08 13:23 ` Jeff King
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: "Peter Valdemar Mørch (Lists)" @ 2008-08-08 12:49 UTC (permalink / raw)
To: git
We have > 37000 white space "errors" in HEAD, mostly trailing
whitespace, and I'm looking for a
$ git diff --check | git??? --whitespace=fix
command.
Is there such a beast?
I see that git-apply has a --whitespace=<action> option, but I don't
seem to grock how to be able to use it for fixing my working directory.
Details follow:
I can create a perl script that does this for me (e.g. inspired by
1.5.6's hooks/pre-commit's perl version of git diff --check) and post it
here if anybody would like it, but I'd rather use some well-tested
method if one exists. And it seems git-apply has the functionality somehow.
Of course, I can also:
$ git diff --check > tmpcfile
# (Or some other command to find all of them under ./)
$ vim
:cfile tmpcfile
Thank you for --check having a handy output format, BTW! But I prefer
automation (and automated auditing of the results) for 37000 lines.
Also the way I found them is like this:
$ git diff --check $(git log --pretty=format:%H | tail -1)..HEAD .
(The diff between "the empty commit" and HEAD - well between the first
commit and HEAD anyway. Is there a ref for "totally empty" or the
revision before the first commit? Or a more elegant way to get this list?)
Peter
--
Peter Valdemar Mørch
http://www.morch.com
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: How to fix (and find) many git-* --check errors? 2008-08-08 12:49 How to fix (and find) many git-* --check errors? "Peter Valdemar Mørch (Lists)" @ 2008-08-08 13:23 ` Jeff King 2008-08-08 13:28 ` Björn Steinbrink ` (2 subsequent siblings) 3 siblings, 0 replies; 6+ messages in thread From: Jeff King @ 2008-08-08 13:23 UTC (permalink / raw) To: "Peter Valdemar Mørch (Lists)"; +Cc: git On Fri, Aug 08, 2008 at 02:49:00PM +0200, "Peter Valdemar Mørch (Lists)" wrote: > (The diff between "the empty commit" and HEAD - well between the first > commit and HEAD anyway. Is there a ref for "totally empty" or the > revision before the first commit? Or a more elegant way to get this > list?) It is not advertised, but we always recognize the empty sha1 of the empty tree: git diff --check 4b825dc642cb6eb9a060e54bf8d69288fbee4904 In fact, just the other day I was using this for the Nth time and got tired of looking it up in the code, so I wrote the patch below. I don't know if it is too crazy to be included in mainline git (it was discussed a long time ago, but I think the general response was "what would it be good for?"). --- cache.h | 4 ++++ refs.c | 4 ++++ sha1_file.c | 3 +-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cache.h b/cache.h index 30f1d62..4aa02ae 100644 --- a/cache.h +++ b/cache.h @@ -567,6 +567,10 @@ static inline unsigned int hexval(unsigned char c) #define MINIMUM_ABBREV 4 #define DEFAULT_ABBREV 7 +#define EMPTY_TREE_SHA1 \ + "\x4b\x82\x5d\xc6\x42\xcb\x6e\xb9\xa0\x60" \ + "\xe5\x4b\xf8\xd6\x92\x88\xfb\xee\x49\x04" + extern int get_sha1(const char *str, unsigned char *sha1); extern int get_sha1_with_mode(const char *str, unsigned char *sha1, unsigned *mode); extern int get_sha1_hex(const char *hex, unsigned char *sha1); diff --git a/refs.c b/refs.c index 39a3b23..0acbcbc 100644 --- a/refs.c +++ b/refs.c @@ -427,6 +427,10 @@ const char *resolve_ref(const char *ref, unsigned char *sha1, int reading, int * } list = list->next; } + if (!strcmp(ref, "EMPTY")) { + hashcpy(sha1, (unsigned char *)EMPTY_TREE_SHA1); + return ref; + } if (reading || errno != ENOENT) return NULL; hashclr(sha1); diff --git a/sha1_file.c b/sha1_file.c index 2aff59b..38aad13 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1985,8 +1985,7 @@ static int cached_object_nr, cached_object_alloc; static struct cached_object empty_tree = { /* empty tree sha1: 4b825dc642cb6eb9a060e54bf8d69288fbee4904 */ - "\x4b\x82\x5d\xc6\x42\xcb\x6e\xb9\xa0\x60" - "\xe5\x4b\xf8\xd6\x92\x88\xfb\xee\x49\x04", + EMPTY_TREE_SHA1, OBJ_TREE, "", 0 -- 1.6.0.rc1.260.g4782 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: How to fix (and find) many git-* --check errors? 2008-08-08 12:49 How to fix (and find) many git-* --check errors? "Peter Valdemar Mørch (Lists)" 2008-08-08 13:23 ` Jeff King @ 2008-08-08 13:28 ` Björn Steinbrink 2008-08-08 14:57 ` "Peter Valdemar Mørch (Lists)" 2008-08-08 19:27 ` Junio C Hamano 3 siblings, 0 replies; 6+ messages in thread From: Björn Steinbrink @ 2008-08-08 13:28 UTC (permalink / raw) To: Peter Valdemar Mørch (Lists); +Cc: git On 2008.08.08 14:49:00 +0200, "Peter Valdemar Mørch (Lists)" wrote: > We have > 37000 white space "errors" in HEAD, mostly trailing > whitespace, and I'm looking for a > > $ git diff --check | git??? --whitespace=fix > > command. > > Is there such a beast? > > I see that git-apply has a --whitespace=<action> option, but I don't > seem to grock how to be able to use it for fixing my working directory. I'd probably do something like: # Create a commit with an empty tree rm .git/index git commit -m tmp rm -r * (include dotfiles if required, ie. remove all tracked files) git diff -R HEAD^ | git apply --index --whitespace=fix git commit --amend -m "Whitespace fixed up" But probably there's some smarter way than that. Björn ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to fix (and find) many git-* --check errors? 2008-08-08 12:49 How to fix (and find) many git-* --check errors? "Peter Valdemar Mørch (Lists)" 2008-08-08 13:23 ` Jeff King 2008-08-08 13:28 ` Björn Steinbrink @ 2008-08-08 14:57 ` "Peter Valdemar Mørch (Lists)" 2008-08-08 19:27 ` Junio C Hamano 3 siblings, 0 replies; 6+ messages in thread From: "Peter Valdemar Mørch (Lists)" @ 2008-08-08 14:57 UTC (permalink / raw) To: git Thanks to hints from both Jeff King and Björn Stenbrink I got it working. Here is my script, if anybody is interested. It handles both fixing whitespace in current workspace diffs: $ git-fix-whitespace file (requires existing diffs) and fixing all whitespace problems in a file: $ git-fix-whitespace -f file (asserts no existing diffs) Now all I need to do is grock how to fix stuff already in the index, but I'll leave that for another day... Peter ----------------- #!/bin/bash # Take a -f option to fix all whitespace problems in entire files # completely. Otherwise only fix current diffs. # Option handling while getopts fh? o do case "$o" in f) fixEntireFile=1;; [h?]) echo >&2 "Usage: $0 [-f] file ..." echo >&2 "-f: Fix the entire file" echo >&2 " Otherwise only fix current diffs" exit 1;; esac done shift $(($OPTIND-1)) # A constant for a rev that is empty EMPTY_TREE_SHA1=4b825dc642cb6eb9a060e54bf8d69288fbee4904 # Check to see we're on a clean HEAD just to be sure. # (Not sure this is necessary, but just in case.) git --no-pager diff --exit-code HEAD -- "$@" > /dev/null if [ $? = 0 ] ; then # There is no current diff if [ "$fixEntireFile" != "" ] ; then # Good, there is no diff, and we've been asked to fix # the entire file # Remove all files - the -f for rm is just needed if # $@ happens to contain only untracked files git-ls-tree -z -r --name-status HEAD "$@" | \ xargs --null rm -f # Re-create the files - but with whitespace fixed git diff $EMPTY_TREE_SHA1 HEAD -- "$@" | \ git-apply --whitespace=fix else echo >&2 '*Error*: there no diff with HEAD' exit 1 fi else # There is a current diff if [ "$fixEntireFile" = "" ] ; then # Good, there is a current diff, that we need to fix TEMP_FILE=$(tempfile) git diff -- "$@" > $TEMP_FILE git checkout HEAD -- "$@" git apply --whitespace=fix $TEMP_FILE rm $TEMP_FILE else echo >&2 '*Error*: there is diff with HEAD' exit 1 fi fi ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to fix (and find) many git-* --check errors? 2008-08-08 12:49 How to fix (and find) many git-* --check errors? "Peter Valdemar Mørch (Lists)" ` (2 preceding siblings ...) 2008-08-08 14:57 ` "Peter Valdemar Mørch (Lists)" @ 2008-08-08 19:27 ` Junio C Hamano 2008-08-09 7:28 ` "Peter Valdemar Mørch (Lists)" 3 siblings, 1 reply; 6+ messages in thread From: Junio C Hamano @ 2008-08-08 19:27 UTC (permalink / raw) To: Peter Valdemar Mørch (Lists); +Cc: git "Peter Valdemar Mørch (Lists)" <4ux6as402@sneakemail.com> writes: > We have > 37000 white space "errors" in HEAD, mostly trailing > whitespace, and I'm looking for a > > $ git diff --check | git??? --whitespace=fix > > command. Starting from a clean checkout, you could do something like this: $ git reset --hard $ rm .git/index $ git diff --binary -R HEAD >P.diff $ git apply --whitespace=fix --cached <P.diff $ git commit -m "Fixed all whitespace gotchas" P.diff contains essentially everything, and you are recreating everything from that patch. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to fix (and find) many git-* --check errors? 2008-08-08 19:27 ` Junio C Hamano @ 2008-08-09 7:28 ` "Peter Valdemar Mørch (Lists)" 0 siblings, 0 replies; 6+ messages in thread From: "Peter Valdemar Mørch (Lists)" @ 2008-08-09 7:28 UTC (permalink / raw) To: git Junio C Hamano gitster-at-pobox.com |Lists| wrote: > Starting from a clean checkout, you could do something like this: > > $ git reset --hard > $ rm .git/index > $ git diff --binary -R HEAD >P.diff > $ git apply --whitespace=fix --cached <P.diff > $ git commit -m "Fixed all whitespace gotchas" > > P.diff contains essentially everything, and you are recreating everything > from that patch. Thanks for taking the time to answer my many mails and questions. It really is helpful to me. Rambling on: Scary with the "rm .git/index"! It bascially creates an empty index it seems... That was news to me. As a newbie I try not to meddle too much in .git/ ... I tried the above on git.git, and it gave: warning: 485 lines applied after fixing whitespace errors. I would suggest finishing the above with: $ git checkout HEAD otherwise, the working dir is stuck at the old unfixed state. But like I posted earlier, I have another solution that works on selected files. With git, there is always more than one way to do things, it seems... Peter -- Peter Valdemar Mørch http://www.morch.com ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-08-09 7:30 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-08-08 12:49 How to fix (and find) many git-* --check errors? "Peter Valdemar Mørch (Lists)" 2008-08-08 13:23 ` Jeff King 2008-08-08 13:28 ` Björn Steinbrink 2008-08-08 14:57 ` "Peter Valdemar Mørch (Lists)" 2008-08-08 19:27 ` Junio C Hamano 2008-08-09 7:28 ` "Peter Valdemar Mørch (Lists)"
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.