author | Junio C Hamano <gitster@pobox.com> | |
Wed, 30 Jun 2010 18:55:39 +0000 (11:55 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 30 Jun 2010 18:55:39 +0000 (11:55 -0700) |
* jl/status-ignore-submodules:
Add the option "--ignore-submodules" to "git status"
git submodule: ignore dirty submodules for summary and status
Conflicts:
builtin/commit.c
t/t7508-status.sh
wt-status.c
wt-status.h
Add the option "--ignore-submodules" to "git status"
git submodule: ignore dirty submodules for summary and status
Conflicts:
builtin/commit.c
t/t7508-status.sh
wt-status.c
wt-status.h
1 | 2 | |||
---|---|---|---|---|
Documentation/git-status.txt | patch | | diff1 | | diff2 | | blob | history |
builtin/commit.c | patch | | diff1 | | diff2 | | blob | history |
diff.c | patch | | diff1 | | diff2 | | blob | history |
git-submodule.sh | patch | | diff1 | | diff2 | | blob | history |
t/t7508-status.sh | patch | | diff1 | | diff2 | | blob | history |
wt-status.c | patch | | diff1 | | diff2 | | blob | history |
wt-status.h | patch | | diff1 | | diff2 | | blob | history |
diff --cc Documentation/git-status.txt
Simple merge
diff --cc builtin/commit.c
index c6b053a508facc2029df489d069e0667cfeb28fe,01817509262138bc453de401f63913d61f5b47d0..c101f006f6b5d7d185aa97081fb9717de92b09cd
--- 1/builtin/commit.c
--- 2/builtin/commit.c
+++ b/builtin/commit.c
static char *author_name, *author_email, *author_date;
static int all, edit_flag, also, interactive, only, amend, signoff;
static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
-static int no_post_rewrite;
+static int no_post_rewrite, allow_empty_message;
- static char *untracked_files_arg, *force_date;
+ static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
/*
* The default commit message cleanup mode will remove the lines
* beginning with # (shell comments) and leading and trailing
"mode",
"show untracked files, optional modes: all, normal, no. (Default: all)",
PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
+ OPT_BOOLEAN(0, "ignored", &show_ignored_in_status,
+ "show ignored files"),
+ { OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, "when",
+ "ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)",
+ PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
OPT_END(),
};
read_cache_preload(s.pathspec);
refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, s.pathspec, NULL, NULL);
+
+ fd = hold_locked_index(&index_lock, 0);
+ if (0 <= fd) {
+ if (!write_cache(fd, active_cache, active_nr))
+ commit_locked_index(&index_lock);
+ rollback_lock_file(&index_lock);
+ }
+
s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
s.in_merge = in_merge;
+ s.ignore_submodule_arg = ignore_submodule_arg;
wt_status_collect(&s);
if (s.relative_paths)
diff --cc diff.c
Simple merge
diff --cc git-submodule.sh
Simple merge
diff --cc t/t7508-status.sh
index 9e081073fbed00da362137446d78a7be7f86350b,63d437e0e6b5a959b77c78072af1942d73fafe49..a72fe3ae640378350102a07124aee201fb1c637b
--- 1/t/t7508-status.sh
--- 2/t/t7508-status.sh
+++ b/t/t7508-status.sh
test_cmp expect output
'
+test_expect_success POSIXPERM 'status succeeds in a read-only repository' '
+ (
+ chmod a-w .git &&
+ # make dir1/tracked stat-dirty
+ >dir1/tracked1 && mv -f dir1/tracked1 dir1/tracked &&
+ git status -s >output &&
+ ! grep dir1/tracked output &&
+ # make sure "status" succeeded without writing index out
+ git diff-files | grep dir1/tracked
+ )
+ status=$?
+ chmod 775 .git
+ (exit $status)
+'
+
+ cat > expect << EOF
+ # On branch master
+ # Changed but not updated:
+ # (use "git add <file>..." to update what will be committed)
+ # (use "git checkout -- <file>..." to discard changes in working directory)
+ #
+ # modified: dir1/modified
+ #
+ # Untracked files:
+ # (use "git add <file>..." to include in what will be committed)
+ #
+ # dir1/untracked
+ # dir2/modified
+ # dir2/untracked
+ # expect
+ # output
+ # untracked
+ no changes added to commit (use "git add" and/or "git commit -a")
+ EOF
+
+ test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
+ echo modified > sm/untracked &&
+ git status --ignore-submodules=untracked > output &&
+ test_cmp expect output
+ '
+
+ test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' '
+ git status --ignore-submodules=dirty > output &&
+ test_cmp expect output
+ '
+
+ test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' '
+ echo modified > sm/foo &&
+ git status --ignore-submodules=dirty > output &&
+ test_cmp expect output
+ '
+
+ cat > expect << EOF
+ # On branch master
+ # Changed but not updated:
+ # (use "git add <file>..." to update what will be committed)
+ # (use "git checkout -- <file>..." to discard changes in working directory)
+ # (commit or discard the untracked or modified content in submodules)
+ #
+ # modified: dir1/modified
+ # modified: sm (modified content)
+ #
+ # Untracked files:
+ # (use "git add <file>..." to include in what will be committed)
+ #
+ # dir1/untracked
+ # dir2/modified
+ # dir2/untracked
+ # expect
+ # output
+ # untracked
+ no changes added to commit (use "git add" and/or "git commit -a")
+ EOF
+
+ test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
+ git status --ignore-submodules=untracked > output &&
+ test_cmp expect output
+ '
+
+ head2=$(cd sm && git commit -q -m "2nd commit" foo && git rev-parse --short=7 --verify HEAD)
+
+ cat > expect << EOF
+ # On branch master
+ # Changed but not updated:
+ # (use "git add <file>..." to update what will be committed)
+ # (use "git checkout -- <file>..." to discard changes in working directory)
+ #
+ # modified: dir1/modified
+ # modified: sm (new commits)
+ #
+ # Submodules changed but not updated:
+ #
+ # * sm $head...$head2 (1):
+ # > 2nd commit
+ #
+ # Untracked files:
+ # (use "git add <file>..." to include in what will be committed)
+ #
+ # dir1/untracked
+ # dir2/modified
+ # dir2/untracked
+ # expect
+ # output
+ # untracked
+ no changes added to commit (use "git add" and/or "git commit -a")
+ EOF
+
+ test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
+ git status --ignore-submodules=untracked > output &&
+ test_cmp expect output
+ '
+
+ test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" '
+ git status --ignore-submodules=dirty > output &&
+ test_cmp expect output
+ '
+
+ cat > expect << EOF
+ # On branch master
+ # Changed but not updated:
+ # (use "git add <file>..." to update what will be committed)
+ # (use "git checkout -- <file>..." to discard changes in working directory)
+ #
+ # modified: dir1/modified
+ #
+ # Untracked files:
+ # (use "git add <file>..." to include in what will be committed)
+ #
+ # dir1/untracked
+ # dir2/modified
+ # dir2/untracked
+ # expect
+ # output
+ # untracked
+ no changes added to commit (use "git add" and/or "git commit -a")
+ EOF
+
+ test_expect_success "--ignore-submodules=all suppresses submodule summary" '
+ git status --ignore-submodules=all > output &&
+ test_cmp expect output
+ '
+
test_done
diff --cc wt-status.c
index 38754ad735e9e6b090eb23990d82926cd2d82396,894d66f8fc3e1175080345f0f068ee828663e664..2f9e33c8fa172b129fd956abc4f74a5bf5543ba7
--- 1/wt-status.c
--- 2/wt-status.c
+++ b/wt-status.c
#include "quote.h"
#include "run-command.h"
#include "remote.h"
+#include "refs.h"
+ #include "submodule.h"
static char default_wt_status_colors[][COLOR_MAXLEN] = {
GIT_COLOR_NORMAL, /* WT_STATUS_HEADER */
diff --cc wt-status.h
index 4cd74c4b32f51dbe575b0a04a894a520df79e9bf,192909691e70622fac8054716d5663ae128cc683..9df9c9fad2512d7c1d7d6456cdd645d641b5a089
--- 1/wt-status.h
--- 2/wt-status.h
+++ b/wt-status.h
int use_color;
int relative_paths;
int submodule_summary;
+ int show_ignored_files;
enum untracked_status_type show_untracked_files;
- char color_palette[WT_STATUS_UNMERGED+1][COLOR_MAXLEN];
+ const char *ignore_submodule_arg;
+ char color_palette[WT_STATUS_REMOTE_BRANCH+1][COLOR_MAXLEN];
/* These are computed during processing of the individual sections */
int commitable;