From 96a738c0ddd49afc3bfcbf7575be55e492b69a82 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 1 Jan 2007 23:42:53 -0800 Subject: [PATCH 1/7] Remove unused variable (git-commit.sh) Signed-off-by: Junio C Hamano --- git-commit.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/git-commit.sh b/git-commit.sh index 6bce41af4d..04aad5e5da 100755 --- a/git-commit.sh +++ b/git-commit.sh @@ -8,7 +8,6 @@ SUBDIRECTORY_OK=Yes . git-sh-setup git-rev-parse --verify HEAD >/dev/null 2>&1 || initial_commit=t -branch=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD) case "$0" in *status) From 54b9e0225ad150b4528d7a12f2196ad46f058302 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 2 Jan 2007 11:22:08 -0800 Subject: [PATCH 2/7] fetch-pack: do not use lockfile structure on stack. They are used in atexit() for clean-up, and you will be accessing unallocated memory at that point. See 31f584c2 for the fix for a similar problem. Signed-off-by: Junio C Hamano --- fetch-pack.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fetch-pack.c b/fetch-pack.c index c527bf9e96..1530a94794 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -625,6 +625,8 @@ static int remove_duplicates(int nr_heads, char **heads) return dst; } +static struct lock_file lock; + int main(int argc, char **argv) { int i, ret, nr_heads; @@ -632,7 +634,6 @@ int main(int argc, char **argv) int fd[2]; pid_t pid; struct stat st; - struct lock_file lock; setup_git_directory(); From 44a167b007a20189200f4baf9ff4f24aa0f7571e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 2 Jan 2007 00:57:11 -0800 Subject: [PATCH 3/7] instaweb: load Apache mime and dir modules if they are needed I've noticed that Apache 2.2 on a Debian etch machine has these compiled as modules. Also set ServerName to avoid a warning at startup. Signed-off-by: Eric Wong Signed-off-by: Junio C Hamano --- git-instaweb.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/git-instaweb.sh b/git-instaweb.sh index 16cd351f7f..08362f43c0 100755 --- a/git-instaweb.sh +++ b/git-instaweb.sh @@ -160,10 +160,20 @@ apache2_conf () { test "$local" = true && bind='127.0.0.1:' echo 'text/css css' > $fqgitdir/mime.types cat > "$conf" <> "$conf" + fi + done + cat >> "$conf" < Date: Tue, 2 Jan 2007 14:12:09 +0000 Subject: [PATCH 4/7] send pack check for failure to send revisions list When passing the revisions list to pack-objects we do not check for errors nor short writes. Introduce a new write_in_full which will handle short writes and report errors to the caller. Use this to short cut the send on failure, allowing us to wait for and report the child in case the failure is its fault. Signed-off-by: Andy Whitcroft Signed-off-by: Junio C Hamano --- cache.h | 1 + send-pack.c | 8 ++++++-- write_or_die.c | 23 +++++++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/cache.h b/cache.h index 29dd290c92..384f829b96 100644 --- a/cache.h +++ b/cache.h @@ -420,6 +420,7 @@ extern char *git_commit_encoding; extern char *git_log_output_encoding; extern int copy_fd(int ifd, int ofd); +extern int write_in_full(int fd, const void *buf, size_t count, const char *); extern void write_or_die(int fd, const void *buf, size_t count); extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg); diff --git a/send-pack.c b/send-pack.c index eaa6efbc0c..c195d080db 100644 --- a/send-pack.c +++ b/send-pack.c @@ -65,12 +65,16 @@ static int pack_objects(int fd, struct ref *refs) memcpy(buf + 1, sha1_to_hex(refs->old_sha1), 40); buf[0] = '^'; buf[41] = '\n'; - write(pipe_fd[1], buf, 42); + if (!write_in_full(pipe_fd[1], buf, 42, + "send-pack: send refs")) + break; } if (!is_null_sha1(refs->new_sha1)) { memcpy(buf, sha1_to_hex(refs->new_sha1), 40); buf[40] = '\n'; - write(pipe_fd[1], buf, 41); + if (!write_in_full(pipe_fd[1], buf, 41, + "send-pack: send refs")) + break; } refs = refs->next; } diff --git a/write_or_die.c b/write_or_die.c index bfe4eeb649..650f13fc01 100644 --- a/write_or_die.c +++ b/write_or_die.c @@ -43,3 +43,26 @@ int write_or_whine(int fd, const void *buf, size_t count, const char *msg) return 1; } + +int write_in_full(int fd, const void *buf, size_t count, const char *msg) +{ + const char *p = buf; + ssize_t written; + + while (count > 0) { + written = xwrite(fd, p, count); + if (written == 0) { + fprintf(stderr, "%s: disk full?\n", msg); + return 0; + } + else if (written < 0) { + fprintf(stderr, "%s: write error (%s)\n", + msg, strerror(errno)); + return 0; + } + count -= written; + p += written; + } + + return 1; +} From e54eef9e1f8adb055c7bbe0e4f50a3716f611dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20R=C3=BChle?= Date: Tue, 2 Jan 2007 20:26:20 +0100 Subject: [PATCH 5/7] Clarify syntax and role of git-add in status output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This uses the actual (simplified) synopsis line from the git-add man page and advertises its incremental nature. Signed-off-by: Jürgen Rühle Signed-off-by: Junio C Hamano --- wt-status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wt-status.c b/wt-status.c index db427384ff..34be91b77c 100644 --- a/wt-status.c +++ b/wt-status.c @@ -15,7 +15,7 @@ static char wt_status_colors[][COLOR_MAXLEN] = { "\033[31m", /* WT_STATUS_CHANGED: red */ "\033[31m", /* WT_STATUS_UNTRACKED: red */ }; -static const char* use_add_msg = "use \"git add file1 file2\" to include for commit"; +static const char* use_add_msg = "use \"git add ...\" to incrementally add content to commit"; static int parse_status_slot(const char *var, int offset) { From 6e458bf63f48fb7d15cb70ad7c7b7b71915d94a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20R=C3=BChle?= Date: Tue, 2 Jan 2007 20:26:22 +0100 Subject: [PATCH 6/7] Improve "nothing to commit" part of status output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously git-status in a clean working directory would advice the user to use git add. This isn't very helpful when there is nothing to add in the working directory, therefore note a clean working directory while displaying the other sections and print the appropriate message for each case. Signed-off-by: Jürgen Rühle Signed-off-by: Junio C Hamano --- wt-status.c | 24 ++++++++++++++++++------ wt-status.h | 1 + 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/wt-status.c b/wt-status.c index 34be91b77c..ca4690e86b 100644 --- a/wt-status.c +++ b/wt-status.c @@ -51,6 +51,8 @@ void wt_status_prepare(struct wt_status *s) s->verbose = 0; s->commitable = 0; s->untracked = 0; + + s->workdir_clean = 1; } static void wt_status_print_header(const char *main, const char *sub) @@ -162,9 +164,12 @@ static void wt_status_print_changed_cb(struct diff_queue_struct *q, struct diff_options *options, void *data) { + struct wt_status *s = data; int i; - if (q->nr) + if (q->nr) { + s->workdir_clean = 0; wt_status_print_header("Changed but not added", use_add_msg); + } for (i = 0; i < q->nr; i++) wt_status_print_filepair(WT_STATUS_CHANGED, q->queue[i]); if (q->nr) @@ -215,7 +220,7 @@ static void wt_status_print_changed(struct wt_status *s) run_diff_files(&rev, 0); } -static void wt_status_print_untracked(const struct wt_status *s) +static void wt_status_print_untracked(struct wt_status *s) { struct dir_struct dir; const char *x; @@ -250,6 +255,7 @@ static void wt_status_print_untracked(const struct wt_status *s) continue; } if (!shown_header) { + s->workdir_clean = 0; wt_status_print_header("Untracked files", use_add_msg); shown_header = 1; } @@ -291,10 +297,16 @@ void wt_status_print(struct wt_status *s) if (s->verbose && !s->is_initial) wt_status_print_verbose(s); - if (!s->commitable) - printf("%s (%s)\n", - s->amend ? "# No changes" : "nothing to commit", - use_add_msg); + if (!s->commitable) { + if (s->amend) + printf("# No changes\n"); + else if (s->workdir_clean) + printf(s->is_initial + ? "nothing to commit\n" + : "nothing to commit (working directory matches HEAD)\n"); + else + printf("no changes added to commit (use \"git add\" and/or \"git commit [-a|-i|-o]\")\n"); + } } int git_status_config(const char *k, const char *v) diff --git a/wt-status.h b/wt-status.h index 0a5a5b7ba9..892a86c76a 100644 --- a/wt-status.h +++ b/wt-status.h @@ -16,6 +16,7 @@ struct wt_status { int verbose; int amend; int untracked; + int workdir_clean; }; int git_status_config(const char *var, const char *value); From 98bf8a47c296f51ea9722fef4bb81dbfb70cd4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20R=C3=BChle?= Date: Tue, 2 Jan 2007 20:26:23 +0100 Subject: [PATCH 7/7] Support --amend on initial commit in status output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We check the existence of the parent commit to determine whether the status is requested for an initial commit. Since the parent commit depends on the presence of the --amend switch do initial commit detection after command line arguments have been handled. Signed-off-by: Jürgen Rühle Signed-off-by: Junio C Hamano --- wt-status.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wt-status.c b/wt-status.c index ca4690e86b..9b777a569e 100644 --- a/wt-status.c +++ b/wt-status.c @@ -41,8 +41,6 @@ void wt_status_prepare(struct wt_status *s) unsigned char sha1[20]; const char *head; - s->is_initial = get_sha1("HEAD", sha1) ? 1 : 0; - head = resolve_ref("HEAD", sha1, 0, NULL); s->branch = head ? xstrdup(head) : NULL; @@ -277,6 +275,9 @@ static void wt_status_print_verbose(struct wt_status *s) void wt_status_print(struct wt_status *s) { + unsigned char sha1[20]; + s->is_initial = get_sha1(s->reference, sha1) ? 1 : 0; + if (s->branch) color_printf_ln(color(WT_STATUS_HEADER), "# On branch %s", s->branch);