This is meant to make raw git not hugely less usable than something
like raw CVS. I want to make a 1.0 release of the plumbing, and the
actual commit part was just too intimidating.
This commit is contained in:
Linus Torvalds 2005-05-30 12:51:00 -07:00
Родитель f345b0a066
Коммит a3e870f2e2
4 изменённых файлов: 104 добавлений и 2 удалений

Просмотреть файл

@ -22,7 +22,7 @@ INSTALL=install
SCRIPTS=git-apply-patch-script git-merge-one-file-script git-prune-script \
git-pull-script git-tag-script git-resolve-script git-whatchanged \
git-deltafy-script git-fetch-script
git-deltafy-script git-fetch-script git-status-script git-commit-script
PROG= git-update-cache git-diff-files git-init-db git-write-tree \
git-read-tree git-commit-tree git-cat-file git-fsck-cache \
@ -31,7 +31,7 @@ PROG= git-update-cache git-diff-files git-init-db git-write-tree \
git-unpack-file git-export git-diff-cache git-convert-cache \
git-http-pull git-rpush git-rpull git-rev-list git-mktag \
git-diff-helper git-tar-tree git-local-pull git-write-blob \
git-get-tar-commit-id git-mkdelta git-apply
git-get-tar-commit-id git-mkdelta git-apply git-stripspace
all: $(PROG)
@ -112,6 +112,7 @@ git-diff-helper: diff-helper.c
git-tar-tree: tar-tree.c
git-write-blob: write-blob.c
git-mkdelta: mkdelta.c
git-stripspace: stripspace.c
git-http-pull: LIBS += -lcurl

15
git-commit-script Executable file
Просмотреть файл

@ -0,0 +1,15 @@
#!/bin/sh
git-status-script > .editmsg
if [ "$?" != "0" ]
then
cat .editmsg
exit 1
fi
ED=${VISUAL:$EDITOR}
ED=${ED:vi}
$ED .editmsg
grep -v '^#' < .editmsg | git-stripspace > .cmitmsg
[ -s .cmitmsg ] || exit 1
tree=$(git-write-tree) || exit 1
commit=$(cat .cmitmsg | git-commit-tree $tree -p HEAD) || exit 1
echo $commit > .git/HEAD

38
git-status-script Executable file
Просмотреть файл

@ -0,0 +1,38 @@
#!/bin/sh
report () {
header="#
# $1:
# ($2)
#
"
trailer=""
while read oldmode mode oldsha sha status name newname
do
echo -n "$header"
header=""
trailer="#
"
case "$status" in
M) echo "# modified: $name";;
D) echo "# deleted: $name";;
T) echo "# typechange: $name";;
C) echo "# copied: $name -> $newname";;
R) echo "# renamed: $name -> $newname";;
N) echo "# new file: $name";;
U) echo "# unmerged: $name";;
esac
done
echo -n "$trailer"
[ "$header" ]
}
git-update-cache --refresh >& /dev/null
git-diff-cache -B -C --cached HEAD | sed 's/^://' | report "Updated but not checked in" "will commit"
committable="$?"
git-diff-files | sed 's/^://' | report "Changed but not updated" "use git-update-cache to mark for commit"
if [ "$committable" == "0" ]
then
echo "nothing to commit"
exit 1
fi
exit 0

48
stripspace.c Normal file
Просмотреть файл

@ -0,0 +1,48 @@
#include <stdio.h>
#include <string.h>
#include <ctype.h>
/*
* Remove empty lines from the beginning and end.
*
* Turn multiple consecutive empty lines into just one
* empty line.
*/
static void cleanup(char *line)
{
int len = strlen(line);
if (len > 1 && line[len-1] == '\n') {
do {
unsigned char c = line[len-2];
if (!isspace(c))
break;
line[len-2] = '\n';
len--;
line[len] = 0;
} while (len > 1);
}
}
int main(int argc, char **argv)
{
int empties = -1;
char line[1024];
while (fgets(line, sizeof(line), stdin)) {
cleanup(line);
/* Not just an empty line? */
if (line[0] != '\n') {
if (empties > 0)
putchar('\n');
empties = 0;
fputs(line, stdout);
continue;
}
if (empties < 0)
continue;
empties++;
}
return 0;
}