Re: [PATCH 4/9] fast-export: add new --refspec option

2013-09-22 Thread Richard Hansen
On 2013-08-29 11:23, Felipe Contreras wrote:
 So that we can covert the exported ref names.
 
 Signed-off-by: Felipe Contreras felipe.contre...@gmail.com
 ---
  Documentation/git-fast-export.txt |  4 
  builtin/fast-export.c | 30 ++
  t/t9350-fast-export.sh|  7 +++
  3 files changed, 41 insertions(+)
 
 diff --git a/Documentation/git-fast-export.txt 
 b/Documentation/git-fast-export.txt
 index 85f1f30..221506b 100644
 --- a/Documentation/git-fast-export.txt
 +++ b/Documentation/git-fast-export.txt
 @@ -105,6 +105,10 @@ marks the same across runs.
   in the commit (as opposed to just listing the files which are
   different from the commit's first parent).
  
 +--refspec::
 + Apply the specified refspec to each ref exported. Multiple of them can
 + be specified.
 +

Do you mean '--refspec=refspec' and/or '--refspec refspec'?

How are the multiple refspecs specified?  Space/comma/colon separated
list?  Or multiple '--refspec' arguments with one refspec per '--refspec'?

 diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh
 index 34c2d8f..dcf 100755
 --- a/t/t9350-fast-export.sh
 +++ b/t/t9350-fast-export.sh
 @@ -504,4 +504,11 @@ test_expect_success 'refs are updated even if no commits 
 need to be exported' '
   test_cmp expected actual
  '
  
 +test_expect_success 'use refspec' '
 + git fast-export --refspec refs/heads/master:refs/heads/foobar master | \
 + grep ^commit  | sort | uniq  actual 
 + echo commit refs/heads/foobar  expected 
 + test_cmp expected actual
 +'
 +
  test_done
 

I think it'd be good to add a test for multiple refspecs.

-Richard
--
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 4/9] fast-export: add new --refspec option

2013-09-22 Thread Felipe Contreras
Richard Hansen wrote:
 On 2013-08-29 11:23, Felipe Contreras wrote:
  So that we can covert the exported ref names.
  
  Signed-off-by: Felipe Contreras felipe.contre...@gmail.com
  ---
   Documentation/git-fast-export.txt |  4 
   builtin/fast-export.c | 30 ++
   t/t9350-fast-export.sh|  7 +++
   3 files changed, 41 insertions(+)
  
  diff --git a/Documentation/git-fast-export.txt 
  b/Documentation/git-fast-export.txt
  index 85f1f30..221506b 100644
  --- a/Documentation/git-fast-export.txt
  +++ b/Documentation/git-fast-export.txt
  @@ -105,6 +105,10 @@ marks the same across runs.
  in the commit (as opposed to just listing the files which are
  different from the commit's first parent).
   
  +--refspec::
  +   Apply the specified refspec to each ref exported. Multiple of them can
  +   be specified.
  +
 
 Do you mean '--refspec=refspec' and/or '--refspec refspec'?

I mean --refspec refspec1 --refspec refspec2.

  diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh
  index 34c2d8f..dcf 100755
  --- a/t/t9350-fast-export.sh
  +++ b/t/t9350-fast-export.sh
  @@ -504,4 +504,11 @@ test_expect_success 'refs are updated even if no 
  commits need to be exported' '
  test_cmp expected actual
   '
   
  +test_expect_success 'use refspec' '
  +   git fast-export --refspec refs/heads/master:refs/heads/foobar master | \
  +   grep ^commit  | sort | uniq  actual 
  +   echo commit refs/heads/foobar  expected 
  +   test_cmp expected actual
  +'
  +
   test_done
  
 
 I think it'd be good to add a test for multiple refspecs.

Maybe. If these patches were to actually be applied.

-- 
Felipe Contreras
--
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


[PATCH 4/9] fast-export: add new --refspec option

2013-08-29 Thread Felipe Contreras
So that we can covert the exported ref names.

Signed-off-by: Felipe Contreras felipe.contre...@gmail.com
---
 Documentation/git-fast-export.txt |  4 
 builtin/fast-export.c | 30 ++
 t/t9350-fast-export.sh|  7 +++
 3 files changed, 41 insertions(+)

diff --git a/Documentation/git-fast-export.txt 
b/Documentation/git-fast-export.txt
index 85f1f30..221506b 100644
--- a/Documentation/git-fast-export.txt
+++ b/Documentation/git-fast-export.txt
@@ -105,6 +105,10 @@ marks the same across runs.
in the commit (as opposed to just listing the files which are
different from the commit's first parent).
 
+--refspec::
+   Apply the specified refspec to each ref exported. Multiple of them can
+   be specified.
+
 [git-rev-list-args...]::
A list of arguments, acceptable to 'git rev-parse' and
'git rev-list', that specifies the specific objects and references
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 91114f4..7f314f0 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -17,6 +17,7 @@
 #include utf8.h
 #include parse-options.h
 #include quote.h
+#include remote.h
 
 static const char *fast_export_usage[] = {
N_(git fast-export [rev-list-opts]),
@@ -30,6 +31,8 @@ static int fake_missing_tagger;
 static int use_done_feature;
 static int no_data;
 static int full_tree;
+static struct refspec *refspecs;
+static int refspecs_nr;
 
 static int parse_opt_signed_tag_mode(const struct option *opt,
 const char *arg, int unset)
@@ -502,6 +505,15 @@ static void get_tags_and_duplicates(struct 
rev_cmdline_info *info,
if (dwim_ref(e-name, strlen(e-name), sha1, full_name) != 1)
continue;
 
+   if (refspecs) {
+   char *private;
+   private = apply_refspecs(refspecs, refspecs_nr, 
full_name);
+   if (private) {
+   free(full_name);
+   full_name = private;
+   }
+   }
+
switch (e-item-type) {
case OBJ_COMMIT:
commit = (struct commit *)e-item;
@@ -661,6 +673,7 @@ int cmd_fast_export(int argc, const char **argv, const char 
*prefix)
struct commit *commit;
char *export_filename = NULL, *import_filename = NULL;
uint32_t lastimportid;
+   struct string_list refspecs_list;
struct option options[] = {
OPT_INTEGER(0, progress, progress,
N_(show progress after n objects)),
@@ -681,6 +694,8 @@ int cmd_fast_export(int argc, const char **argv, const char 
*prefix)
OPT_BOOLEAN(0, use-done-feature, use_done_feature,
 N_(Use the done feature to terminate the 
stream)),
OPT_BOOL(0, no-data, no_data, N_(Skip output of blob 
data)),
+   OPT_STRING_LIST(0, refspec, refspecs_list, N_(refspec),
+N_(Apply refspec to exported refs)),
OPT_END()
};
 
@@ -700,6 +715,19 @@ int cmd_fast_export(int argc, const char **argv, const 
char *prefix)
if (argc  1)
usage_with_options (fast_export_usage, options);
 
+   if (refspecs_list.nr) {
+   const char *refspecs_str[refspecs_list.nr];
+   int i;
+
+   for (i = 0; i  refspecs_list.nr; i++)
+   refspecs_str[i] = refspecs_list.items[i].string;
+
+   refspecs_nr = refspecs_list.nr;
+   refspecs = parse_fetch_refspec(refspecs_nr, refspecs_str);
+
+   string_list_clear(refspecs_list, 1);
+   }
+
if (use_done_feature)
printf(feature done\n);
 
@@ -734,5 +762,7 @@ int cmd_fast_export(int argc, const char **argv, const char 
*prefix)
if (use_done_feature)
printf(done\n);
 
+   free_refspec(refspecs_nr, refspecs);
+
return 0;
 }
diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh
index 34c2d8f..dcf 100755
--- a/t/t9350-fast-export.sh
+++ b/t/t9350-fast-export.sh
@@ -504,4 +504,11 @@ test_expect_success 'refs are updated even if no commits 
need to be exported' '
test_cmp expected actual
 '
 
+test_expect_success 'use refspec' '
+   git fast-export --refspec refs/heads/master:refs/heads/foobar master | \
+   grep ^commit  | sort | uniq  actual 
+   echo commit refs/heads/foobar  expected 
+   test_cmp expected actual
+'
+
 test_done
-- 
1.8.4-fc

--
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