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

2014-03-31 Thread Junio C Hamano
Jens Lehmann jens.lehm...@web.de writes:

 Changes in add.c and cache.h (and related compilo fix in checkout.c) are
 needed to make it work for commit -a too.

 Looking good so far, but we definitely need tests for this new option.

 But I wonder if it would make more sense to start by teaching the
 --ignore-submodules option to git add. Then this patch could reuse
 that for commit -a.

I am not sure about the code reuse, but from the usability and
consistency point of view, they must go hand in hand, I would
think.
--
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 1/2] commit: add --ignore-submodules[=when] parameter

2014-03-30 Thread Jens Lehmann
Am 29.03.2014 23:50, schrieb Ronald Weiss:
 Git commit honors the 'ignore' setting from .gitmodules or .git/config,
 but didn't allow to override it from command line, like other commands do.
 
 Useful when values for commit are 'all' (default) or 'none'. The others
 ('dirty' and 'untracked') have same effect as 'none', as commit is only
 interested in whether the submodule's HEAD differs from what is commited
 in the superproject.
 
 Changes in add.c and cache.h (and related compilo fix in checkout.c) are
 needed to make it work for commit -a too.

Looking good so far, but we definitely need tests for this new option.

But I wonder if it would make more sense to start by teaching the
--ignore-submodules option to git add. Then this patch could reuse
that for commit -a.

 Signed-off-by: Ronald Weiss weiss.ron...@gmail.com
 ---
  Documentation/git-commit.txt |  6 ++
  builtin/add.c| 16 
  builtin/checkout.c   |  2 +-
  builtin/commit.c |  8 +++-
  cache.h  |  2 +-
  5 files changed, 27 insertions(+), 7 deletions(-)
 
 diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
 index 1a7616c..c8839c8 100644
 --- a/Documentation/git-commit.txt
 +++ b/Documentation/git-commit.txt
 @@ -13,6 +13,7 @@ SYNOPSIS
  [-F file | -m msg] [--reset-author] [--allow-empty]
  [--allow-empty-message] [--no-verify] [-e] [--author=author]
  [--date=date] [--cleanup=mode] [--[no-]status]
 +[--ignore-submodules[=when]]
  [-i | -o] [-S[keyid]] [--] [file...]
  
  DESCRIPTION
 @@ -271,6 +272,11 @@ The possible options are:
  The default can be changed using the status.showUntrackedFiles
  configuration variable documented in linkgit:git-config[1].
  
 +--ignore-submodules[=when]::
 + Can be used to override any settings of the 'ignore' option
 + in linkgit:git-config[1] or linkgit:gitmodules[5].
 + when can be either none or all, which is the default.
 +
  -v::
  --verbose::
   Show unified diff between the HEAD commit and what
 diff --git a/builtin/add.c b/builtin/add.c
 index 672adc0..1086294 100644
 --- a/builtin/add.c
 +++ b/builtin/add.c
 @@ -168,7 +168,8 @@ static void update_callback(struct diff_queue_struct *q,
  
  static void update_files_in_cache(const char *prefix,
 const struct pathspec *pathspec,
 -   struct update_callback_data *data)
 +   struct update_callback_data *data,
 +   const char *ignore_submodules_arg)
  {
   struct rev_info rev;
  
 @@ -180,17 +181,24 @@ static void update_files_in_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);
  }
  
  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;
  
   memset(data, 0, sizeof(data));
   data.flags = flags;
 - update_files_in_cache(prefix, pathspec, data);
 + update_files_in_cache(prefix, pathspec, data, ignore_submodules_arg);
   return !!data.add_errors;
  }
  
 @@ -576,7 +584,7 @@ int cmd_add(int argc, const char **argv, const char 
 *prefix)
   memset(pathspec, 0, sizeof(pathspec));
   }
   update_data.flags = flags  ~ADD_CACHE_IMPLICIT_DOT;
 - update_files_in_cache(prefix, pathspec, update_data);
 + update_files_in_cache(prefix, pathspec, update_data, NULL);
  
   exit_status |= !!update_data.add_errors;
   if (add_new_files)
 diff --git a/builtin/checkout.c b/builtin/checkout.c
 index ada51fa..22a4b48 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
* when branches have different end-of-line
 diff --git a/builtin/commit.c b/builtin/commit.c
 index 26b2986..121c185 100644
 --- a/builtin/commit.c
 +++ b/builtin/commit.c
 @@ -360,7 +360,7 @@ static char *prepare_index(int argc, const char **argv, 
 const char *prefix,
*/
   if (all || (also  pathspec.nr)) {
   fd = 

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

2014-03-29 Thread Jens Lehmann
Am 29.03.2014 23:50, schrieb Ronald Weiss:
 Git commit honors the 'ignore' setting from .gitmodules or .git/config,
 but didn't allow to override it from command line, like other commands do.
 
 Useful when values for commit are 'all' (default) or 'none'. The others
 ('dirty' and 'untracked') have same effect as 'none', as commit is only
 interested in whether the submodule's HEAD differs from what is commited
 in the superproject.
 
 Changes in add.c and cache.h (and related compilo fix in checkout.c) are
 needed to make it work for commit -a too.

Thanks, looking good from first glance, will look deeper into that
tomorrow.

 Signed-off-by: Ronald Weiss weiss.ron...@gmail.com
 ---
  Documentation/git-commit.txt |  6 ++
  builtin/add.c| 16 
  builtin/checkout.c   |  2 +-
  builtin/commit.c |  8 +++-
  cache.h  |  2 +-
  5 files changed, 27 insertions(+), 7 deletions(-)
 
 diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
 index 1a7616c..c8839c8 100644
 --- a/Documentation/git-commit.txt
 +++ b/Documentation/git-commit.txt
 @@ -13,6 +13,7 @@ SYNOPSIS
  [-F file | -m msg] [--reset-author] [--allow-empty]
  [--allow-empty-message] [--no-verify] [-e] [--author=author]
  [--date=date] [--cleanup=mode] [--[no-]status]
 +[--ignore-submodules[=when]]
  [-i | -o] [-S[keyid]] [--] [file...]
  
  DESCRIPTION
 @@ -271,6 +272,11 @@ The possible options are:
  The default can be changed using the status.showUntrackedFiles
  configuration variable documented in linkgit:git-config[1].
  
 +--ignore-submodules[=when]::
 + Can be used to override any settings of the 'ignore' option
 + in linkgit:git-config[1] or linkgit:gitmodules[5].
 + when can be either none or all, which is the default.
 +
  -v::
  --verbose::
   Show unified diff between the HEAD commit and what
 diff --git a/builtin/add.c b/builtin/add.c
 index 672adc0..1086294 100644
 --- a/builtin/add.c
 +++ b/builtin/add.c
 @@ -168,7 +168,8 @@ static void update_callback(struct diff_queue_struct *q,
  
  static void update_files_in_cache(const char *prefix,
 const struct pathspec *pathspec,
 -   struct update_callback_data *data)
 +   struct update_callback_data *data,
 +   const char *ignore_submodules_arg)
  {
   struct rev_info rev;
  
 @@ -180,17 +181,24 @@ static void update_files_in_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);
  }
  
  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;
  
   memset(data, 0, sizeof(data));
   data.flags = flags;
 - update_files_in_cache(prefix, pathspec, data);
 + update_files_in_cache(prefix, pathspec, data, ignore_submodules_arg);
   return !!data.add_errors;
  }
  
 @@ -576,7 +584,7 @@ int cmd_add(int argc, const char **argv, const char 
 *prefix)
   memset(pathspec, 0, sizeof(pathspec));
   }
   update_data.flags = flags  ~ADD_CACHE_IMPLICIT_DOT;
 - update_files_in_cache(prefix, pathspec, update_data);
 + update_files_in_cache(prefix, pathspec, update_data, NULL);
  
   exit_status |= !!update_data.add_errors;
   if (add_new_files)
 diff --git a/builtin/checkout.c b/builtin/checkout.c
 index ada51fa..22a4b48 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
* when branches have different end-of-line
 diff --git a/builtin/commit.c b/builtin/commit.c
 index 26b2986..121c185 100644
 --- a/builtin/commit.c
 +++ b/builtin/commit.c
 @@ -360,7 +360,7 @@ static char *prepare_index(int argc, const char **argv, 
 const char *prefix,
*/
   if (all || (also  pathspec.nr)) {
   fd = hold_locked_index(index_lock, 1);
 - add_files_to_cache(also ? prefix : NULL, pathspec, 0);
 + add_files_to_cache(also ? prefix : NULL, pathspec, 0,