Re: [PATCH 2/3] move index_has_changes() from builtin/am.c to merge.c for reuse

2017-12-22 Thread Elijah Newren
On Fri, Dec 22, 2017 at 12:46 PM, Junio C Hamano  wrote:
> Elijah Newren  writes:
>
>> On Thu, Dec 21, 2017 at 11:19 AM, Elijah Newren  wrote:
>>> index_has_changes() is a function we want to reuse outside of just am,
>>> making it also available for merge-recursive and merge-ort.
>>>
>>> Signed-off-by: Elijah Newren 
>>> ---
>>
>> Note: These patches built on master, and merge cleanly with next and
>> pu.  However, this patch has a minor conflict with maint.  If you'd
>> prefer a version that applies on top of maint, let me know and I'll
>> resubmit.
>
> I think I managed to create two topics, one that is with these three
> patches (2/3 backported) on top of maint and the other one merges
> the former on top of master.  Please see if you found a mismerge
> when I push the results out.

I'm about to head out on a multi-day trip, so I might not get to this
until the middle of next week.  I'll try to take a look as soon as I
can, though.


Re: [PATCH 2/3] move index_has_changes() from builtin/am.c to merge.c for reuse

2017-12-22 Thread Junio C Hamano
Elijah Newren  writes:

> On Thu, Dec 21, 2017 at 11:19 AM, Elijah Newren  wrote:
>> index_has_changes() is a function we want to reuse outside of just am,
>> making it also available for merge-recursive and merge-ort.
>>
>> Signed-off-by: Elijah Newren 
>> ---
>
> Note: These patches built on master, and merge cleanly with next and
> pu.  However, this patch has a minor conflict with maint.  If you'd
> prefer a version that applies on top of maint, let me know and I'll
> resubmit.

I think I managed to create two topics, one that is with these three
patches (2/3 backported) on top of maint and the other one merges
the former on top of master.  Please see if you found a mismerge
when I push the results out.

Thanks.


Re: [PATCH 2/3] move index_has_changes() from builtin/am.c to merge.c for reuse

2017-12-21 Thread Elijah Newren
On Thu, Dec 21, 2017 at 11:19 AM, Elijah Newren  wrote:
> index_has_changes() is a function we want to reuse outside of just am,
> making it also available for merge-recursive and merge-ort.
>
> Signed-off-by: Elijah Newren 
> ---

Note: These patches built on master, and merge cleanly with next and
pu.  However, this patch has a minor conflict with maint.  If you'd
prefer a version that applies on top of maint, let me know and I'll
resubmit.


[PATCH 2/3] move index_has_changes() from builtin/am.c to merge.c for reuse

2017-12-21 Thread Elijah Newren
index_has_changes() is a function we want to reuse outside of just am,
making it also available for merge-recursive and merge-ort.

Signed-off-by: Elijah Newren 
---
 builtin/am.c | 37 -
 cache.h  |  9 +
 merge.c  | 33 +
 3 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/builtin/am.c b/builtin/am.c
index 3d98e52085..a02d5186cb 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1142,43 +1142,6 @@ static void refresh_and_write_cache(void)
die(_("unable to write index file"));
 }
 
-/**
- * Returns 1 if the index differs from HEAD, 0 otherwise. When on an unborn
- * branch, returns 1 if there are entries in the index, 0 otherwise. If an
- * strbuf is provided, the space-separated list of files that differ will be
- * appended to it.
- */
-static int index_has_changes(struct strbuf *sb)
-{
-   struct object_id head;
-   int i;
-
-   if (!get_oid_tree("HEAD", )) {
-   struct diff_options opt;
-
-   diff_setup();
-   opt.flags.exit_with_status = 1;
-   if (!sb)
-   opt.flags.quick = 1;
-   do_diff_cache(, );
-   diffcore_std();
-   for (i = 0; sb && i < diff_queued_diff.nr; i++) {
-   if (i)
-   strbuf_addch(sb, ' ');
-   strbuf_addstr(sb, diff_queued_diff.queue[i]->two->path);
-   }
-   diff_flush();
-   return opt.flags.has_changes != 0;
-   } else {
-   for (i = 0; sb && i < active_nr; i++) {
-   if (i)
-   strbuf_addch(sb, ' ');
-   strbuf_addstr(sb, active_cache[i]->name);
-   }
-   return !!active_nr;
-   }
-}
-
 /**
  * Dies with a user-friendly message on how to proceed after resolving the
  * problem. This message can be overridden with state->resolvemsg.
diff --git a/cache.h b/cache.h
index a2ec8c0b55..d8b975a571 100644
--- a/cache.h
+++ b/cache.h
@@ -644,6 +644,15 @@ extern int write_locked_index(struct index_state *, struct 
lock_file *lock, unsi
 extern int discard_index(struct index_state *);
 extern void move_index_extensions(struct index_state *dst, struct index_state 
*src);
 extern int unmerged_index(const struct index_state *);
+
+/**
+ * Returns 1 if the index differs from HEAD, 0 otherwise. When on an unborn
+ * branch, returns 1 if there are entries in the index, 0 otherwise. If an
+ * strbuf is provided, the space-separated list of files that differ will be
+ * appended to it.
+ */
+extern int index_has_changes(struct strbuf *sb);
+
 extern int verify_path(const char *path);
 extern int strcmp_offset(const char *s1, const char *s2, size_t *first_change);
 extern int index_dir_exists(struct index_state *istate, const char *name, int 
namelen);
diff --git a/merge.c b/merge.c
index e5d796c9f2..195b578700 100644
--- a/merge.c
+++ b/merge.c
@@ -1,4 +1,6 @@
 #include "cache.h"
+#include "diff.h"
+#include "diffcore.h"
 #include "lockfile.h"
 #include "commit.h"
 #include "run-command.h"
@@ -15,6 +17,37 @@ static const char *merge_argument(struct commit *commit)
return EMPTY_TREE_SHA1_HEX;
 }
 
+int index_has_changes(struct strbuf *sb)
+{
+   struct object_id head;
+   int i;
+
+   if (!get_oid_tree("HEAD", )) {
+   struct diff_options opt;
+
+   diff_setup();
+   opt.flags.exit_with_status = 1;
+   if (!sb)
+   opt.flags.quick = 1;
+   do_diff_cache(, );
+   diffcore_std();
+   for (i = 0; sb && i < diff_queued_diff.nr; i++) {
+   if (i)
+   strbuf_addch(sb, ' ');
+   strbuf_addstr(sb, diff_queued_diff.queue[i]->two->path);
+   }
+   diff_flush();
+   return opt.flags.has_changes != 0;
+   } else {
+   for (i = 0; sb && i < active_nr; i++) {
+   if (i)
+   strbuf_addch(sb, ' ');
+   strbuf_addstr(sb, active_cache[i]->name);
+   }
+   return !!active_nr;
+   }
+}
+
 int try_merge_command(const char *strategy, size_t xopts_nr,
  const char **xopts, struct commit_list *common,
  const char *head_arg, struct commit_list *remotes)
-- 
2.15.1.436.g63a861020b