Isolate another piece of create_bundle() to work on.

Signed-off-by: Jonathan Nieder <jrnie...@gmail.com>
---
 bundle.c |   78 +++++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 44 insertions(+), 34 deletions(-)

diff --git a/bundle.c b/bundle.c
index e90b5c5..8ba6479 100644
--- a/bundle.c
+++ b/bundle.c
@@ -245,45 +245,20 @@ static int list_prerequisites(int bundle_fd, struct 
rev_info *revs,
        return 0;
 }
 
-int create_bundle(struct bundle_header *header, const char *path,
-               int argc, const char **argv)
+static int bundle_list_refs(int bundle_fd,
+               int argc, const char **argv, struct rev_info *revs)
 {
-       static struct lock_file lock;
-       int bundle_fd = -1;
-       int bundle_to_stdout;
-       const char **argv_pack = xmalloc(5 * sizeof(const char *));
        int i, ref_count = 0;
-       struct rev_info revs;
-       struct child_process rls;
 
-       bundle_to_stdout = !strcmp(path, "-");
-       if (bundle_to_stdout)
-               bundle_fd = 1;
-       else
-               bundle_fd = hold_lock_file_for_update(&lock, path,
-                                                     LOCK_DIE_ON_ERROR);
-
-       /* write signature */
-       write_or_die(bundle_fd, bundle_signature, strlen(bundle_signature));
-
-       /* init revs to list objects for pack-objects later */
-       save_commit_buffer = 0;
-       init_revisions(&revs, NULL);
-
-       /* write prerequisites */
-       if (list_prerequisites(bundle_fd, &revs, argc, argv))
-               return -1;
-
-       /* write references */
-       argc = setup_revisions(argc, argv, &revs, NULL);
+       argc = setup_revisions(argc, argv, revs, NULL);
 
        if (argc > 1)
                return error("unrecognized argument: %s'", argv[1]);
 
-       object_array_remove_duplicates(&revs.pending);
+       object_array_remove_duplicates(&revs->pending);
 
-       for (i = 0; i < revs.pending.nr; i++) {
-               struct object_array_entry *e = revs.pending.objects + i;
+       for (i = 0; i < revs->pending.nr; i++) {
+               struct object_array_entry *e = revs->pending.objects + i;
                unsigned char sha1[20];
                char *ref;
                const char *display_ref;
@@ -298,7 +273,7 @@ int create_bundle(struct bundle_header *header, const char 
*path,
                display_ref = (flag & REF_ISSYMREF) ? e->name : ref;
 
                if (e->item->type == OBJ_TAG &&
-                               !is_tag_in_date_range(e->item, &revs)) {
+                               !is_tag_in_date_range(e->item, revs)) {
                        e->item->flags |= UNINTERESTING;
                        continue;
                }
@@ -344,7 +319,7 @@ int create_bundle(struct bundle_header *header, const char 
*path,
                                 */
                                obj = parse_object(sha1);
                                obj->flags |= SHOWN;
-                               add_pending_object(&revs, obj, e->name);
+                               add_pending_object(revs, obj, e->name);
                        }
                        free(ref);
                        continue;
@@ -358,7 +333,42 @@ int create_bundle(struct bundle_header *header, const char 
*path,
                free(ref);
        }
        if (!ref_count)
-               die ("Refusing to create empty bundle.");
+               die("Refusing to create empty bundle.");
+       return 0;
+}
+
+int create_bundle(struct bundle_header *header, const char *path,
+               int argc, const char **argv)
+{
+       static struct lock_file lock;
+       int bundle_fd = -1;
+       int bundle_to_stdout;
+       const char **argv_pack = xmalloc(5 * sizeof(const char *));
+       struct rev_info revs;
+       struct child_process rls;
+       int i;
+
+       bundle_to_stdout = !strcmp(path, "-");
+       if (bundle_to_stdout)
+               bundle_fd = 1;
+       else
+               bundle_fd = hold_lock_file_for_update(&lock, path,
+                                                     LOCK_DIE_ON_ERROR);
+
+       /* write signature */
+       write_or_die(bundle_fd, bundle_signature, strlen(bundle_signature));
+
+       /* init revs to list objects for pack-objects later */
+       save_commit_buffer = 0;
+       init_revisions(&revs, NULL);
+
+       /* write prerequisites */
+       if (list_prerequisites(bundle_fd, &revs, argc, argv))
+               return -1;
+
+       /* write references */
+       if (bundle_list_refs(bundle_fd, argc, argv, &revs))
+               return -1;
 
        /* end header */
        write_or_die(bundle_fd, "\n", 1);
-- 
1.7.1.198.g8d802




-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to