Re: [PATCH v4 1/2] add: add --ignore-submodules[=when] parameter

2014-04-21 Thread Ronald Weiss
On 18. 4. 2014 13:53, Jens Lehmann wrote:
 Am 13.04.2014 00:45, schrieb Ronald Weiss:
 Allow ignoring submodules (or not) by command line switch, like diff
 and status do.

 Git add currently doesn't honor ignore from .gitmodules or .git/config,
 which is related functionality, however I'd like to change that in
 another patch, coming soon.
 
 I think we should drop this paragraph from this commit message. Though
 I believe it's helpful to add this information after the --- below
 to inform readers of the list of your future plans.
 
 This commit is also a prerequisite for the next one in series, which
 adds the --ignore-submodules switch to git commit.
 
 But this information definitely belongs here.
 
 That's why signature
 of function add_files_to_cache was changed.
 
 But that's necessary for this patch too, no?

No, for this patch alone, we could just use the global variable, which
is set up by parse_options(), without changing the public function and
breaking compilation in other files.

 
 That also requires compilo fixes in checkout.c and commit.c
 
 Sorry, but I don't know what a compilo fix is ;-) .. I suspect you
 mean that add_files_to_cache() needs a new NULL argument in some
 places. What about dropping the last two sentences and adding
 something like Add a new argument to add_files_to_cache() to pass
 the command line option and update all other call sites to pass
 NULL instead. to the first paragraph?
 
 Apart from that and the flags of the test (see below) this patch
 is looking good to me.

OK, I'll update the commit message, and fix the file mode for the added
test script. Will repost once we sort out the problems (failing tests)
You have with the second patch (for commit).

 diff --git a/t/t3704-add-ignore-submodules.sh 
 b/t/t3704-add-ignore-submodules.sh
 new file mode 100644
 
 The flags should be 100755 here, currently make test fails because
 of this.

I'm sorry for this, I was testing it on Windows, where the file mode
doesn't matter, that's why I missed it.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 1/2] add: add --ignore-submodules[=when] parameter

2014-04-18 Thread Jens Lehmann
Am 13.04.2014 00:45, schrieb Ronald Weiss:
 Allow ignoring submodules (or not) by command line switch, like diff
 and status do.
 
 Git add currently doesn't honor ignore from .gitmodules or .git/config,
 which is related functionality, however I'd like to change that in
 another patch, coming soon.

I think we should drop this paragraph from this commit message. Though
I believe it's helpful to add this information after the --- below
to inform readers of the list of your future plans.

 This commit is also a prerequisite for the next one in series, which
 adds the --ignore-submodules switch to git commit.

But this information definitely belongs here.

 That's why signature
 of function add_files_to_cache was changed.

But that's necessary for this patch too, no?

 That also requires compilo fixes in checkout.c and commit.c

Sorry, but I don't know what a compilo fix is ;-) .. I suspect you
mean that add_files_to_cache() needs a new NULL argument in some
places. What about dropping the last two sentences and adding
something like Add a new argument to add_files_to_cache() to pass
the command line option and update all other call sites to pass
NULL instead. to the first paragraph?

Apart from that and the flags of the test (see below) this patch
is looking good to me.

 Signed-off-by: Ronald Weiss weiss.ron...@gmail.com
 ---
  Documentation/git-add.txt|  7 ++-
  builtin/add.c| 16 --
  builtin/checkout.c   |  2 +-
  builtin/commit.c |  2 +-
  cache.h  |  2 +-
  t/t3704-add-ignore-submodules.sh | 45 
 
  6 files changed, 68 insertions(+), 6 deletions(-)
  create mode 100644 t/t3704-add-ignore-submodules.sh
 
 diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
 index 9631526..b2c936f 100644
 --- a/Documentation/git-add.txt
 +++ b/Documentation/git-add.txt
 @@ -11,7 +11,7 @@ SYNOPSIS
  'git add' [-n] [-v] [--force | -f] [--interactive | -i] [--patch | -p]
 [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
 [--intent-to-add | -N] [--refresh] [--ignore-errors] 
 [--ignore-missing]
 -   [--] [pathspec...]
 +   [--ignore-submodules[=when]] [--] [pathspec...]
  
  DESCRIPTION
  ---
 @@ -164,6 +164,11 @@ for git add --no-all pathspec..., i.e. ignored 
 removed files.
   be ignored, no matter if they are already present in the work
   tree or not.
  
 +--ignore-submodules[=when]::
 + Can be used to override any settings of the 'submodule.*.ignore'
 + option in linkgit:git-config[1] or linkgit:gitmodules[5].
 + when can be either none or all, which is the default.
 +
  \--::
   This option can be used to separate command-line options from
   the list of files, (useful when filenames might be mistaken
 diff --git a/builtin/add.c b/builtin/add.c
 index 459208a..85f2110 100644
 --- a/builtin/add.c
 +++ b/builtin/add.c
 @@ -83,7 +83,8 @@ static void update_callback(struct diff_queue_struct *q,
  }
  
  int add_files_to_cache(const char *prefix,
 -const struct pathspec *pathspec, int flags)
 +const struct pathspec *pathspec, int flags,
 +const char *ignore_submodules_arg)
  {
   struct update_callback_data data;
   struct rev_info rev;
 @@ -99,6 +100,12 @@ int add_files_to_cache(const char *prefix,
   rev.diffopt.format_callback = update_callback;
   rev.diffopt.format_callback_data = data;
   rev.max_count = 0; /* do not compare unmerged paths with stage #2 */
 +
 + if (ignore_submodules_arg) {
 + DIFF_OPT_SET(rev.diffopt, OVERRIDE_SUBMODULE_CONFIG);
 + handle_ignore_submodules_arg(rev.diffopt, 
 ignore_submodules_arg);
 + }
 +
   run_diff_files(rev, DIFF_RACY_IS_MODIFIED);
   return !!data.add_errors;
  }
 @@ -237,6 +244,8 @@ static int ignore_add_errors, intent_to_add, 
 ignore_missing;
  static int addremove = ADDREMOVE_DEFAULT;
  static int addremove_explicit = -1; /* unspecified */
  
 +static char *ignore_submodule_arg;
 +
  static int ignore_removal_cb(const struct option *opt, const char *arg, int 
 unset)
  {
   /* if we are told to ignore, we are not adding removals */
 @@ -262,6 +271,9 @@ static struct option builtin_add_options[] = {
   OPT_BOOL( 0 , refresh, refresh_only, N_(don't add, only refresh the 
 index)),
   OPT_BOOL( 0 , ignore-errors, ignore_add_errors, N_(just skip files 
 which cannot be added because of errors)),
   OPT_BOOL( 0 , ignore-missing, ignore_missing, N_(check if - even 
 missing - files are ignored in dry run)),
 + { OPTION_STRING, 0, ignore-submodules, ignore_submodule_arg, 
 N_(when),
 +   N_(ignore changes to submodules, optional when: all, none. (Default: 
 all)),
 +   PARSE_OPT_OPTARG, NULL, (intptr_t)all },
   OPT_END(),
  };
  
 @@ -434,7 +446,7 @@ int cmd_add(int argc, const char **argv, const char 
 

[PATCH v4 1/2] add: add --ignore-submodules[=when] parameter

2014-04-12 Thread Ronald Weiss
Allow ignoring submodules (or not) by command line switch, like diff
and status do.

Git add currently doesn't honor ignore from .gitmodules or .git/config,
which is related functionality, however I'd like to change that in
another patch, coming soon.

This commit is also a prerequisite for the next one in series, which
adds the --ignore-submodules switch to git commit. That's why signature
of function add_files_to_cache was changed. That also requires compilo
fixes in checkout.c and commit.c

Signed-off-by: Ronald Weiss weiss.ron...@gmail.com
---
 Documentation/git-add.txt|  7 ++-
 builtin/add.c| 16 --
 builtin/checkout.c   |  2 +-
 builtin/commit.c |  2 +-
 cache.h  |  2 +-
 t/t3704-add-ignore-submodules.sh | 45 
 6 files changed, 68 insertions(+), 6 deletions(-)
 create mode 100644 t/t3704-add-ignore-submodules.sh

diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 9631526..b2c936f 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -11,7 +11,7 @@ SYNOPSIS
 'git add' [-n] [-v] [--force | -f] [--interactive | -i] [--patch | -p]
  [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
  [--intent-to-add | -N] [--refresh] [--ignore-errors] 
[--ignore-missing]
- [--] [pathspec...]
+ [--ignore-submodules[=when]] [--] [pathspec...]
 
 DESCRIPTION
 ---
@@ -164,6 +164,11 @@ for git add --no-all pathspec..., i.e. ignored removed 
files.
be ignored, no matter if they are already present in the work
tree or not.
 
+--ignore-submodules[=when]::
+   Can be used to override any settings of the 'submodule.*.ignore'
+   option in linkgit:git-config[1] or linkgit:gitmodules[5].
+   when can be either none or all, which is the default.
+
 \--::
This option can be used to separate command-line options from
the list of files, (useful when filenames might be mistaken
diff --git a/builtin/add.c b/builtin/add.c
index 459208a..85f2110 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -83,7 +83,8 @@ static void update_callback(struct diff_queue_struct *q,
 }
 
 int add_files_to_cache(const char *prefix,
-  const struct pathspec *pathspec, int flags)
+  const struct pathspec *pathspec, int flags,
+  const char *ignore_submodules_arg)
 {
struct update_callback_data data;
struct rev_info rev;
@@ -99,6 +100,12 @@ int add_files_to_cache(const char *prefix,
rev.diffopt.format_callback = update_callback;
rev.diffopt.format_callback_data = data;
rev.max_count = 0; /* do not compare unmerged paths with stage #2 */
+
+   if (ignore_submodules_arg) {
+   DIFF_OPT_SET(rev.diffopt, OVERRIDE_SUBMODULE_CONFIG);
+   handle_ignore_submodules_arg(rev.diffopt, 
ignore_submodules_arg);
+   }
+
run_diff_files(rev, DIFF_RACY_IS_MODIFIED);
return !!data.add_errors;
 }
@@ -237,6 +244,8 @@ static int ignore_add_errors, intent_to_add, ignore_missing;
 static int addremove = ADDREMOVE_DEFAULT;
 static int addremove_explicit = -1; /* unspecified */
 
+static char *ignore_submodule_arg;
+
 static int ignore_removal_cb(const struct option *opt, const char *arg, int 
unset)
 {
/* if we are told to ignore, we are not adding removals */
@@ -262,6 +271,9 @@ static struct option builtin_add_options[] = {
OPT_BOOL( 0 , refresh, refresh_only, N_(don't add, only refresh the 
index)),
OPT_BOOL( 0 , ignore-errors, ignore_add_errors, N_(just skip files 
which cannot be added because of errors)),
OPT_BOOL( 0 , ignore-missing, ignore_missing, N_(check if - even 
missing - files are ignored in dry run)),
+   { OPTION_STRING, 0, ignore-submodules, ignore_submodule_arg, 
N_(when),
+ N_(ignore changes to submodules, optional when: all, none. (Default: 
all)),
+ PARSE_OPT_OPTARG, NULL, (intptr_t)all },
OPT_END(),
 };
 
@@ -434,7 +446,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 
plug_bulk_checkin();
 
-   exit_status |= add_files_to_cache(prefix, pathspec, flags);
+   exit_status |= add_files_to_cache(prefix, pathspec, flags, 
ignore_submodule_arg);
 
if (add_new_files)
exit_status |= add_files(dir, flags);
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 07cf555..607af47 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -525,7 +525,7 @@ static int merge_working_tree(const struct checkout_opts 
*opts,
 * entries in the index.
 */
 
-   add_files_to_cache(NULL, NULL, 0);
+   add_files_to_cache(NULL, NULL, 0, NULL);
/*
 * NEEDSWORK: carrying over local changes