Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin-diff-index.c4
-rw-r--r--builtin-diff.c4
-rw-r--r--builtin-update-index.c11
-rw-r--r--diff-lib.c14
-rwxr-xr-xgit-commit.sh21
-rw-r--r--wt-status.c12
6 files changed, 44 insertions, 22 deletions
diff --git a/builtin-diff-index.c b/builtin-diff-index.c
index 95a3db156b..083599d5c4 100644
--- a/builtin-diff-index.c
+++ b/builtin-diff-index.c
@@ -38,5 +38,9 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
if (rev.pending.nr != 1 ||
rev.max_count != -1 || rev.min_age != -1 || rev.max_age != -1)
usage(diff_cache_usage);
+ if (read_cache() < 0) {
+ perror("read_cache");
+ return -1;
+ }
return run_diff_index(&rev, cached);
}
diff --git a/builtin-diff.c b/builtin-diff.c
index 54bbf025d9..45faa2067a 100644
--- a/builtin-diff.c
+++ b/builtin-diff.c
@@ -117,6 +117,10 @@ static int builtin_diff_index(struct rev_info *revs,
revs->max_count != -1 || revs->min_age != -1 ||
revs->max_age != -1)
usage(builtin_diff_usage);
+ if (read_cache() < 0) {
+ perror("read_cache");
+ return -1;
+ }
return run_diff_index(revs, cached);
}
diff --git a/builtin-update-index.c b/builtin-update-index.c
index 772aaba7bb..65246dad8d 100644
--- a/builtin-update-index.c
+++ b/builtin-update-index.c
@@ -487,6 +487,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
int prefix_length = prefix ? strlen(prefix) : 0;
char set_executable_bit = 0;
unsigned int refresh_flags = 0;
+ int lock_error = 0;
struct lock_file *lock_file;
git_config(git_default_config);
@@ -494,7 +495,9 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
/* We can't free this memory, it becomes part of a linked list parsed atexit() */
lock_file = xcalloc(1, sizeof(struct lock_file));
- newfd = hold_lock_file_for_update(lock_file, get_index_file(), 1);
+ newfd = hold_lock_file_for_update(lock_file, get_index_file(), 0);
+ if (newfd < 0)
+ lock_error = errno;
entries = read_cache();
if (entries < 0)
@@ -651,6 +654,12 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
finish:
if (active_cache_changed) {
+ if (newfd < 0) {
+ if (refresh_flags & REFRESH_QUIET)
+ exit(128);
+ die("unable to create '%s.lock': %s",
+ get_index_file(), strerror(lock_error));
+ }
if (write_cache(newfd, active_cache, active_nr) ||
close(newfd) || commit_lock_file(lock_file))
die("Unable to write new index file");
diff --git a/diff-lib.c b/diff-lib.c
index a9b5149d1b..1d184422a5 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -217,6 +217,10 @@ int run_diff_files_cmd(struct rev_info *revs, int argc, const char **argv)
return 0;
}
+ if (read_cache() < 0) {
+ perror("read_cache");
+ return -1;
+ }
return run_diff_files(revs, silent_on_removed);
}
@@ -227,11 +231,7 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed)
if (diff_unmerged_stage < 0)
diff_unmerged_stage = 2;
- entries = read_cache();
- if (entries < 0) {
- perror("read_cache");
- return -1;
- }
+ entries = active_nr;
for (i = 0; i < entries; i++) {
struct stat st;
unsigned int oldmode, newmode;
@@ -559,10 +559,6 @@ int run_diff_index(struct rev_info *revs, int cached)
if (!revs->ignore_merges)
match_missing = 1;
- if (read_cache() < 0) {
- perror("read_cache");
- return -1;
- }
mark_merge_entries();
ent = revs->pending.objects[0].item;
diff --git a/git-commit.sh b/git-commit.sh
index ec506d956f..cfa15110f6 100755
--- a/git-commit.sh
+++ b/git-commit.sh
@@ -13,10 +13,10 @@ git-rev-parse --verify HEAD >/dev/null 2>&1 || initial_commit=t
case "$0" in
*status)
status_only=t
- unmerged_ok_if_status=--unmerged ;;
+ ;;
*commit)
status_only=
- unmerged_ok_if_status= ;;
+ ;;
esac
refuse_partial () {
@@ -389,16 +389,17 @@ else
USE_INDEX="$THIS_INDEX"
fi
-GIT_INDEX_FILE="$USE_INDEX" \
- git-update-index -q $unmerged_ok_if_status --refresh || exit
-
-################################################################
-# If the request is status, just show it and exit.
-
-case "$0" in
-*status)
+case "$status_only" in
+t)
+ # This will silently fail in a read-only repository, which is
+ # what we want.
+ GIT_INDEX_FILE="$USE_INDEX" git-update-index -q --unmerged --refresh
run_status
exit $?
+ ;;
+'')
+ GIT_INDEX_FILE="$USE_INDEX" git-update-index -q --refresh || exit
+ ;;
esac
################################################################
diff --git a/wt-status.c b/wt-status.c
index 2879c3d5ec..e346511153 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -191,12 +191,18 @@ static void wt_status_print_changed_cb(struct diff_queue_struct *q,
wt_status_print_trailer();
}
+static void wt_read_cache(struct wt_status *s)
+{
+ discard_cache();
+ read_cache();
+}
+
void wt_status_print_initial(struct wt_status *s)
{
int i;
char buf[PATH_MAX];
- read_cache();
+ wt_read_cache(s);
if (active_nr) {
s->commitable = 1;
wt_status_print_cached_header(NULL);
@@ -220,6 +226,7 @@ static void wt_status_print_updated(struct wt_status *s)
rev.diffopt.format_callback = wt_status_print_updated_cb;
rev.diffopt.format_callback_data = s;
rev.diffopt.detect_rename = 1;
+ wt_read_cache(s);
run_diff_index(&rev, 1);
}
@@ -231,6 +238,7 @@ static void wt_status_print_changed(struct wt_status *s)
rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK;
rev.diffopt.format_callback = wt_status_print_changed_cb;
rev.diffopt.format_callback_data = s;
+ wt_read_cache(s);
run_diff_files(&rev, 0);
}
@@ -287,6 +295,7 @@ static void wt_status_print_verbose(struct wt_status *s)
setup_revisions(0, NULL, &rev, s->reference);
rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
rev.diffopt.detect_rename = 1;
+ wt_read_cache(s);
run_diff_index(&rev, 1);
}
@@ -316,7 +325,6 @@ void wt_status_print(struct wt_status *s)
}
else {
wt_status_print_updated(s);
- discard_cache();
}
wt_status_print_changed(s);