Re: [RFC PATCH 1/5] format-patch: allow additional generated content in make_cover_letter()

2018-07-17 Thread Eric Sunshine
On Tue, Jul 17, 2018 at 6:15 AM Johannes Schindelin
 wrote:
> On Wed, 30 May 2018, Eric Sunshine wrote:
> > make_cover_letter() returns early when it lacks sufficient state to emit
> > a diffstat, which makes it difficult to extend the function to reliably
> > emit additional generated content. Work around this shortcoming by
> > factoring diffstat-printing logic out to its own function and calling it
> > as needed without otherwise inhibiting normal control flow.
> >
> > Signed-off-by: Eric Sunshine 
>
> Makes sense.

Thanks, but it's probably not worth spending time reviewing this RFC
series. I already have a new series in the works (in fact, mostly
finished) in which the implementation is drastically changed from this
one. Aside from adding an --interdiff option to git-format-patch (in
addition to a --range-diff option) and allowing interdiff and
range-diff to be added as commentary to a single-patch, the new series
also takes advantage of the newly-libified range-diff engine rather
than running git-range-diff as a command. So, most or all of the code
has changed.

(Though, perhaps it wouldn't hurt to review the documentation changes
in this RFC series to see if I botched how I described the option.)


Re: [RFC PATCH 1/5] format-patch: allow additional generated content in make_cover_letter()

2018-07-17 Thread Johannes Schindelin
Hi Eric,

On Wed, 30 May 2018, Eric Sunshine wrote:

> make_cover_letter() returns early when it lacks sufficient state to emit
> a diffstat, which makes it difficult to extend the function to reliably
> emit additional generated content. Work around this shortcoming by
> factoring diffstat-printing logic out to its own function and calling it
> as needed without otherwise inhibiting normal control flow.
> 
> Signed-off-by: Eric Sunshine 

Makes sense.

Ciao,
Dscho

> ---
>  builtin/log.c | 43 +++
>  1 file changed, 23 insertions(+), 20 deletions(-)
> 
> diff --git a/builtin/log.c b/builtin/log.c
> index 71f68a3e4f..e01a256c11 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -992,6 +992,26 @@ static char *find_branch_name(struct rev_info *rev)
>   return branch;
>  }
>  
> +static void emit_diffstat(struct rev_info *rev,
> +   struct commit *origin, struct commit *head)
> +{
> + struct diff_options opts;
> +
> + memcpy(, >diffopt, sizeof(opts));
> + opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
> + opts.stat_width = MAIL_DEFAULT_WRAP;
> +
> + diff_setup_done();
> +
> + diff_tree_oid(>tree->object.oid,
> +   >tree->object.oid,
> +   "", );
> + diffcore_std();
> + diff_flush();
> +
> + fprintf(rev->diffopt.file, "\n");
> +}
> +
>  static void make_cover_letter(struct rev_info *rev, int use_stdout,
> struct commit *origin,
> int nr, struct commit **list,
> @@ -1005,7 +1025,6 @@ static void make_cover_letter(struct rev_info *rev, int 
> use_stdout,
>   struct strbuf sb = STRBUF_INIT;
>   int i;
>   const char *encoding = "UTF-8";
> - struct diff_options opts;
>   int need_8bit_cte = 0;
>   struct pretty_print_context pp = {0};
>   struct commit *head = list[0];
> @@ -1055,25 +1074,9 @@ static void make_cover_letter(struct rev_info *rev, 
> int use_stdout,
>  
>   shortlog_output();
>  
> - /*
> -  * We can only do diffstat with a unique reference point
> -  */
> - if (!origin)
> - return;
> -
> - memcpy(, >diffopt, sizeof(opts));
> - opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
> - opts.stat_width = MAIL_DEFAULT_WRAP;
> -
> - diff_setup_done();
> -
> - diff_tree_oid(>tree->object.oid,
> -   >tree->object.oid,
> -   "", );
> - diffcore_std();
> - diff_flush();
> -
> - fprintf(rev->diffopt.file, "\n");
> + /* We can only do diffstat with a unique reference point */
> + if (origin)
> + emit_diffstat(rev, origin, head);
>  }
>  
>  static const char *clean_message_id(const char *msg_id)
> -- 
> 2.17.1.1235.ge295dfb56e
> 
> 


[RFC PATCH 1/5] format-patch: allow additional generated content in make_cover_letter()

2018-05-30 Thread Eric Sunshine
make_cover_letter() returns early when it lacks sufficient state to emit
a diffstat, which makes it difficult to extend the function to reliably
emit additional generated content. Work around this shortcoming by
factoring diffstat-printing logic out to its own function and calling it
as needed without otherwise inhibiting normal control flow.

Signed-off-by: Eric Sunshine 
---
 builtin/log.c | 43 +++
 1 file changed, 23 insertions(+), 20 deletions(-)

diff --git a/builtin/log.c b/builtin/log.c
index 71f68a3e4f..e01a256c11 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -992,6 +992,26 @@ static char *find_branch_name(struct rev_info *rev)
return branch;
 }
 
+static void emit_diffstat(struct rev_info *rev,
+ struct commit *origin, struct commit *head)
+{
+   struct diff_options opts;
+
+   memcpy(, >diffopt, sizeof(opts));
+   opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
+   opts.stat_width = MAIL_DEFAULT_WRAP;
+
+   diff_setup_done();
+
+   diff_tree_oid(>tree->object.oid,
+ >tree->object.oid,
+ "", );
+   diffcore_std();
+   diff_flush();
+
+   fprintf(rev->diffopt.file, "\n");
+}
+
 static void make_cover_letter(struct rev_info *rev, int use_stdout,
  struct commit *origin,
  int nr, struct commit **list,
@@ -1005,7 +1025,6 @@ static void make_cover_letter(struct rev_info *rev, int 
use_stdout,
struct strbuf sb = STRBUF_INIT;
int i;
const char *encoding = "UTF-8";
-   struct diff_options opts;
int need_8bit_cte = 0;
struct pretty_print_context pp = {0};
struct commit *head = list[0];
@@ -1055,25 +1074,9 @@ static void make_cover_letter(struct rev_info *rev, int 
use_stdout,
 
shortlog_output();
 
-   /*
-* We can only do diffstat with a unique reference point
-*/
-   if (!origin)
-   return;
-
-   memcpy(, >diffopt, sizeof(opts));
-   opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
-   opts.stat_width = MAIL_DEFAULT_WRAP;
-
-   diff_setup_done();
-
-   diff_tree_oid(>tree->object.oid,
- >tree->object.oid,
- "", );
-   diffcore_std();
-   diff_flush();
-
-   fprintf(rev->diffopt.file, "\n");
+   /* We can only do diffstat with a unique reference point */
+   if (origin)
+   emit_diffstat(rev, origin, head);
 }
 
 static const char *clean_message_id(const char *msg_id)
-- 
2.17.1.1235.ge295dfb56e