Merge branch 'es/format-patch-interdiff' into es/format-patch-rangediff
[gitweb.git] / builtin / log.c
index 99ddfe8bb0df1c01dd23e9b31c1261793776765d..fcc2f4dcc82c4bcba8165be8a87ced892ccd2a01 100644 (file)
@@ -30,6 +30,7 @@
 #include "gpg-interface.h"
 #include "progress.h"
 #include "commit-slab.h"
+#include "repository.h"
 #include "interdiff.h"
 
 #define MAIL_DEFAULT_WRAP 72
@@ -620,7 +621,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
                        rev.shown_one = 1;
                        if (ret)
                                break;
-                       o = parse_object(&t->tagged->oid);
+                       o = parse_object(the_repository, &t->tagged->oid);
                        if (!o)
                                ret = error(_("Could not read object %s"),
                                            oid_to_hex(&t->tagged->oid));
@@ -907,8 +908,8 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)
        o2 = rev->pending.objects[1].item;
        flags1 = o1->flags;
        flags2 = o2->flags;
-       c1 = lookup_commit_reference(&o1->oid);
-       c2 = lookup_commit_reference(&o2->oid);
+       c1 = lookup_commit_reference(the_repository, &o1->oid);
+       c2 = lookup_commit_reference(the_repository, &o2->oid);
 
        if ((flags1 & UNINTERESTING) == (flags2 & UNINTERESTING))
                die(_("Not a range."));
@@ -1086,7 +1087,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
 
        if (rev->idiff_oid1) {
                fprintf_ln(rev->diffopt.file, "%s", rev->idiff_title);
-               show_interdiff(rev);
+               show_interdiff(rev, 0);
        }
 }
 
@@ -1540,7 +1541,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                OPT_BOOL(0, "progress", &show_progress,
                         N_("show progress while generating patches")),
                OPT_CALLBACK(0, "interdiff", &idiff_prev, N_("rev"),
-                            N_("show changes against <rev> in cover letter"),
+                            N_("show changes against <rev> in cover letter or single patch"),
                             parse_opt_object_name),
                OPT_END()
        };
@@ -1765,8 +1766,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                rev.total = total + start_number - 1;
 
        if (idiff_prev.nr) {
-               if (!cover_letter)
-                       die(_("--interdiff requires --cover-letter"));
+               if (!cover_letter && total != 1)
+                       die(_("--interdiff requires --cover-letter or single patch"));
                rev.idiff_oid1 = &idiff_prev.oid[idiff_prev.nr - 1];
                rev.idiff_oid2 = get_commit_tree_oid(list[0]);
                rev.idiff_title = diff_title(&idiff_title, reroll_count,
@@ -1811,6 +1812,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                print_signature(rev.diffopt.file);
                total++;
                start_number--;
+               /* interdiff in cover-letter; omit from patches */
+               rev.idiff_oid1 = NULL;
        }
        rev.add_signoff = do_signoff;
 
@@ -1902,7 +1905,8 @@ static int add_pending_commit(const char *arg, struct rev_info *revs, int flags)
 {
        struct object_id oid;
        if (get_oid(arg, &oid) == 0) {
-               struct commit *commit = lookup_commit_reference(&oid);
+               struct commit *commit = lookup_commit_reference(the_repository,
+                                                               &oid);
                if (commit) {
                        commit->object.flags |= flags;
                        add_pending_object(revs, &commit->object, arg);