[PATCH 1/1] add, rm + status patches
- From
David Greaves <david@dgreaves.com>
- Date
- Apr 18, 2005, 22:18 UTC
- Message-ID
- <4264321F.2050107@dgreaves.com>
- In-Reply-To
- <20050418204814.GF5554@pasky.ji.cz>
Petr Baudis wrote:
> Thanks. Could you please send the patches signed off and either with > content-disposition: inline or in the mail body?
Is this OK. Thunderbird isn't the best for attaching patches.
Show 7 quoted lines
> > I think it would be cleaner to do the testing for the dash in the for > loop, so that I can do git add foo bar -. Also, don't forget to > update git add's documentation at the top. For the usage string, I'd > probably prefer (-|FILE)... > > thanks,
Here you are: * git add and git rm now take (-|FILE)... * noted some bugs to be fixed * introduced de-dupe code into add and rm * git status reports added/removed files (although there are extra entries) * README, git and command docs updated
I realise as I write this that I should have split these patches up - I will do so next time.
Has a decision been reached to _not_ code the cogito part of the git suite in perl?
I ask because the code in git status is getting pretty ugly. I'd be happy to help with a preliminary port to perl.
David
Signed-off-by: David Greaves <david@dgreaves.com> ---
Index: README =================================================================== --- c0aff9b98c4242ab8965c428241df1d8f7a1d4bb/README (mode:100644 sha1:798476ad292cc6edf5a2f5782e1de82f6052abe2) +++ cd5cd7a9272ce1966aca3bfce15f703e33cafc04/README (mode:100644 sha1:4282af1604e429dd767fe721751b5ac4a87c410e) @@ -89,6 +89,10 @@ Of course you will want to commit. If you added any new files, do git add newfile1 newfile2 ... + +or even + + find src -type f | git add - first. Then feel free to commit by Index: git =================================================================== --- c0aff9b98c4242ab8965c428241df1d8f7a1d4bb/git (mode:100755 sha1:b648169640025bd68d1b27a0fcc85b65d85e4440) +++ cd5cd7a9272ce1966aca3bfce15f703e33cafc04/git (mode:100755 sha1:2549bc3dc36ec00e747e91edb6e839be0f37ae4a) @@ -25,7 +25,7 @@ Usage: git COMMAND [ARG]... Available commands: - add FILE... + add (-|FILE)... addremote RNAME RSYNC_URL apply < patch on stdin cancel @@ -41,7 +41,7 @@ lsremote merge -b BASE_ID FROM_ID pull [RNAME] - rm FILE... + rm (-|FILE)... seek [COMMIT_ID] status tag TNAME [COMMIT_ID] Index: gitadd.sh =================================================================== --- c0aff9b98c4242ab8965c428241df1d8f7a1d4bb/gitadd.sh (mode:100755 sha1:3ed93ea0fcb995673ba9ee1982e0e7abdbe35982) +++ cd5cd7a9272ce1966aca3bfce15f703e33cafc04/gitadd.sh (mode:100755 sha1:a3e83ac52abd5a9cdc6abd560f95b2f19646fd99) @@ -5,14 +5,26 @@ # # Takes a list of file names at the command line, and schedules them # for addition to the GIT repository at the next commit. +# If one of the filenames is '-' then also read a filelist from STDIN # # FIXME: Those files are omitted from show-diff output! +# FIXME: No checking against git-ignore +# FIXME: No checking against .git/del-queue + if [ ! "$1" ]; then - echo "gitadd.sh: usage: git add FILE..." >&2 + echo "gitadd.sh: usage: git add (-|FILE)..." >&2 exit 1; fi for file in "$@"; do - echo $file >>.git/add-queue + if [ $file = "-" -a ! "$DONE_STDIN" ]; then + cat >> .git/add-queue + DONE_STDIN=1 + else + echo $file >>.git/add-queue + fi done + +# Remove duplicates +sort < .git/add-queue | uniq > .git/add-queue \ No newline at end of file Index: gitrm.sh =================================================================== --- c0aff9b98c4242ab8965c428241df1d8f7a1d4bb/gitrm.sh (mode:100755 sha1:5c18c38a890c9fd9ad2b866ee7b529539d2f3f8f) +++ cd5cd7a9272ce1966aca3bfce15f703e33cafc04/gitrm.sh (mode:100755 sha1:d76542dd6ad892fbbdc93e475aa9b77dd2922fe5) @@ -5,15 +5,28 @@ # # Takes a list of file names at the command line, and schedules them # for addition to the GIT repository at the next commit. +# If one of the filenames is '-' then also read a filelist from STDIN # # FIXME: Those files are omitted from show-diff output! +# FIXME: No checking against git-ignore +# FIXME: No checking against .git/add-queue +# FIXME: Files read in on stdin aren't validated to exist + if [ ! "$1" ]; then - echo "gitrm.sh: usage: git rm FILE..." >&2 + echo "gitrm.sh: usage: git rm (-|FILE)..." >&2 exit 1; fi for file in "$@"; do - [ -e "$file" ] && rm "$file" - echo $file >>.git/rm-queue + if [ $file = "-" -a ! "$DONE_STDIN" ]; then + cat >> .git/rm-queue + DONE_STDIN=1 + else + [ -e "$file" ] && rm "$file" + echo $file >>.git/rm-queue + fi done + +# Remove duplicates +sort < .git/rm-queue | uniq > .git/rm-queue \ No newline at end of file Index: gitstatus.sh =================================================================== --- c0aff9b98c4242ab8965c428241df1d8f7a1d4bb/gitstatus.sh (mode:100755 sha1:6c33f805ebc2630b14a88a07dfc891a9196d66a5) +++ cd5cd7a9272ce1966aca3bfce15f703e33cafc04/gitstatus.sh (mode:100755 sha1:2611d00189e5d03ba8356ec0e4c3af107bae6981) @@ -3,10 +3,12 @@ # Show status of entries in your working tree. # Copyright (c) Petr Baudis, 2005 +# FIXME: newly added files show up twice as ? _AND_ A + { show-files -z -t --others --deleted --unmerged - [ -s .git/add-queue ] && cat .git/add-queue | sed 's/^/A /' | { read x; echo -ne $x'\0'; } - [ -s .git/rm-queue ] && cat .git/rm-queue | sed 's/^/D /' | { read x; echo -ne $x'\0'; } + [ -s .git/add-queue ] && cat .git/add-queue | sed 's/^/A /' | tr '\n' '\0' + [ -s .git/rm-queue ] && cat .git/rm-queue | sed 's/^/D /' | tr '\n' '\0' } | sort -z -k 2 | xargs -0 sh -c ' while [ "$1" ]; do tag=$(echo "$1" | cut -d " " -f 1);