Re: [PATCH v3 3/9] ref-filter: support printing N lines from tag annotation

2015-07-20 Thread Karthik Nayak
On Mon, Jul 20, 2015 at 5:32 AM, Eric Sunshine sunsh...@sunshineco.com wrote:
 On Sat, Jul 18, 2015 at 3:12 PM, Karthik Nayak karthik@gmail.com wrote:
 In 'tag.c' we can print N lines from the annotation of the tag using
 the '-nnum' option. Copy code from 'tag.c' to 'ref-filter' and
 modify 'ref-filter' to support printing of N lines from the annotation
 of tags.

 Signed-off-by: Karthik Nayak karthik@gmail.com
 ---
 diff --git a/ref-filter.c b/ref-filter.c
 index 771c48d..82731ac 100644
 --- a/ref-filter.c
 +++ b/ref-filter.c
 @@ -1288,7 +1288,48 @@ static void assign_formating(struct ref_array_item 
 *ref, int parsed_atom, struct
 }
  }

 -void show_ref_array_item(struct ref_array_item *info, const char *format, 
 int quote_style)
 +/* Print 'lines' no of lines of a given oid */

 This is difficult to read and understand. I presume you meant no. as
 shorthand for number but dropped the period. Even with the period,
 it's still hard to read. Perhaps rewrite it as:

 If 'lines' is greater than 0, print that may lines of...

 or something.


Ah okay :) Will change it to a better explanation.

 diff --git a/ref-filter.h b/ref-filter.h
 index c18781b..7dfdea0 100644
 --- a/ref-filter.h
 +++ b/ref-filter.h
 @@ -87,8 +88,11 @@ int parse_ref_filter_atom(const char *atom, const char 
 *ep);
  int verify_ref_format(const char *format);
  /*  Sort the given ref_array as per the ref_sorting provided */
  void ref_array_sort(struct ref_sorting *sort, struct ref_array *array);
 -/*  Print the ref using the given format and quote_style */
 -void show_ref_array_item(struct ref_array_item *info, const char *format, 
 int quote_style);
 +/*
 + * Print the ref using the given format and quote_style. If lines  0,
 + * prints the lines no of lines of the objected pointed to.
 + */

 Same problem. This literal no is quite confusing. Perhaps rewrite as above:

 If lines  0, print that many lines of...

Will change this too.


 +void show_ref_array_item(struct ref_array_item *info, const char *format, 
 int quote_style, unsigned int lines);

 ref-filter.h seems to be setting a precedent for overlong lines.
 Wrapping this manually could improve readability.


Definitely!

Thanks for all the suggestions.

-- 
Regards,
Karthik Nayak
--
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 v3 3/9] ref-filter: support printing N lines from tag annotation

2015-07-19 Thread Eric Sunshine
On Sat, Jul 18, 2015 at 3:12 PM, Karthik Nayak karthik@gmail.com wrote:
 In 'tag.c' we can print N lines from the annotation of the tag using
 the '-nnum' option. Copy code from 'tag.c' to 'ref-filter' and
 modify 'ref-filter' to support printing of N lines from the annotation
 of tags.

 Signed-off-by: Karthik Nayak karthik@gmail.com
 ---
 diff --git a/ref-filter.c b/ref-filter.c
 index 771c48d..82731ac 100644
 --- a/ref-filter.c
 +++ b/ref-filter.c
 @@ -1288,7 +1288,48 @@ static void assign_formating(struct ref_array_item 
 *ref, int parsed_atom, struct
 }
  }

 -void show_ref_array_item(struct ref_array_item *info, const char *format, 
 int quote_style)
 +/* Print 'lines' no of lines of a given oid */

This is difficult to read and understand. I presume you meant no. as
shorthand for number but dropped the period. Even with the period,
it's still hard to read. Perhaps rewrite it as:

If 'lines' is greater than 0, print that may lines of...

or something.

 diff --git a/ref-filter.h b/ref-filter.h
 index c18781b..7dfdea0 100644
 --- a/ref-filter.h
 +++ b/ref-filter.h
 @@ -87,8 +88,11 @@ int parse_ref_filter_atom(const char *atom, const char 
 *ep);
  int verify_ref_format(const char *format);
  /*  Sort the given ref_array as per the ref_sorting provided */
  void ref_array_sort(struct ref_sorting *sort, struct ref_array *array);
 -/*  Print the ref using the given format and quote_style */
 -void show_ref_array_item(struct ref_array_item *info, const char *format, 
 int quote_style);
 +/*
 + * Print the ref using the given format and quote_style. If lines  0,
 + * prints the lines no of lines of the objected pointed to.
 + */

Same problem. This literal no is quite confusing. Perhaps rewrite as above:

If lines  0, print that many lines of...

 +void show_ref_array_item(struct ref_array_item *info, const char *format, 
 int quote_style, unsigned int lines);

ref-filter.h seems to be setting a precedent for overlong lines.
Wrapping this manually could improve readability.

  /*  Callback function for parsing the sort option */
  int parse_opt_ref_sorting(const struct option *opt, const char *arg, int 
 unset);
  /*  Default sort option based on refname */
 --
 2.4.6
--
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 v3 3/9] ref-filter: support printing N lines from tag annotation

2015-07-18 Thread Karthik Nayak
From: Karthik Nayak karthik@gmail.com

In 'tag.c' we can print N lines from the annotation of the tag using
the '-nnum' option. Copy code from 'tag.c' to 'ref-filter' and
modify 'ref-filter' to support printing of N lines from the annotation
of tags.

Mentored-by: Christian Couder christian.cou...@gmail.com
Mentored-by: Matthieu Moy matthieu@grenoble-inp.fr
Signed-off-by: Karthik Nayak karthik@gmail.com
---
 builtin/for-each-ref.c |  2 +-
 builtin/tag.c  |  4 
 ref-filter.c   | 48 +++-
 ref-filter.h   |  8 ++--
 4 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 40f343b..e4a4f8a 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -74,7 +74,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char 
*prefix)
if (!maxcount || array.nr  maxcount)
maxcount = array.nr;
for (i = 0; i  maxcount; i++)
-   show_ref_array_item(array.items[i], format, quote_style);
+   show_ref_array_item(array.items[i], format, quote_style, 0);
ref_array_clear(array);
return 0;
 }
diff --git a/builtin/tag.c b/builtin/tag.c
index 071d001..10b11ce 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -185,6 +185,10 @@ static enum contains_result contains(struct commit 
*candidate,
return contains_test(candidate, want);
 }
 
+/*
+ * Currently duplicated in ref-filter, will eventually be removed as
+ * we port tag.c to use ref-filter APIs.
+ */
 static void show_tag_lines(const struct object_id *oid, int lines)
 {
int i;
diff --git a/ref-filter.c b/ref-filter.c
index 771c48d..82731ac 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1288,7 +1288,48 @@ static void assign_formating(struct ref_array_item *ref, 
int parsed_atom, struct
}
 }
 
-void show_ref_array_item(struct ref_array_item *info, const char *format, int 
quote_style)
+/* Print 'lines' no of lines of a given oid */
+static void show_tag_lines(const struct object_id *oid, int lines)
+{
+   int i;
+   unsigned long size;
+   enum object_type type;
+   char *buf, *sp, *eol;
+   size_t len;
+
+   buf = read_sha1_file(oid-hash, type, size);
+   if (!buf)
+   die_errno(unable to read object %s, oid_to_hex(oid));
+   if (type != OBJ_COMMIT  type != OBJ_TAG)
+   goto free_return;
+   if (!size)
+   die(an empty %s object %s?,
+   typename(type), oid_to_hex(oid));
+
+   /* skip header */
+   sp = strstr(buf, \n\n);
+   if (!sp)
+   goto free_return;
+
+   /* only take up to lines lines, and strip the signature from a tag */
+   if (type == OBJ_TAG)
+   size = parse_signature(buf, size);
+   for (i = 0, sp += 2; i  lines  sp  buf + size; i++) {
+   if (i)
+   printf(\n);
+   eol = memchr(sp, '\n', size - (sp - buf));
+   len = eol ? eol - sp : size - (sp - buf);
+   fwrite(sp, len, 1, stdout);
+   if (!eol)
+   break;
+   sp = eol + 1;
+   }
+free_return:
+   free(buf);
+}
+
+void show_ref_array_item(struct ref_array_item *info, const char *format,
+int quote_style, unsigned int lines)
 {
const char *cp, *sp, *ep;
 
@@ -1317,6 +1358,11 @@ void show_ref_array_item(struct ref_array_item *info, 
const char *format, int qu
resetv.s = color;
print_value(resetv, quote_style);
}
+   if (lines  0) {
+   struct object_id oid;
+   hashcpy(oid.hash, info-objectname);
+   show_tag_lines(oid, lines);
+   }
putchar('\n');
 }
 
diff --git a/ref-filter.h b/ref-filter.h
index c18781b..7dfdea0 100644
--- a/ref-filter.h
+++ b/ref-filter.h
@@ -56,6 +56,7 @@ struct ref_filter {
struct commit *merge_commit;
 
unsigned int with_commit_tag_algo : 1;
+   unsigned int lines;
 };
 
 struct ref_filter_cbdata {
@@ -87,8 +88,11 @@ int parse_ref_filter_atom(const char *atom, const char *ep);
 int verify_ref_format(const char *format);
 /*  Sort the given ref_array as per the ref_sorting provided */
 void ref_array_sort(struct ref_sorting *sort, struct ref_array *array);
-/*  Print the ref using the given format and quote_style */
-void show_ref_array_item(struct ref_array_item *info, const char *format, int 
quote_style);
+/*
+ * Print the ref using the given format and quote_style. If lines  0,
+ * prints the lines no of lines of the objected pointed to.
+ */
+void show_ref_array_item(struct ref_array_item *info, const char *format, int 
quote_style, unsigned int lines);
 /*  Callback function for parsing the sort option */
 int parse_opt_ref_sorting(const struct option *opt, const char *arg, int 
unset);
 /*  Default sort option based on refname */
--