]> git.proxmox.com Git - libgit2.git/commitdiff
rebase: provide NULL `exec` on non-EXEC operations
authorEdward Thomson <ethomson@microsoft.com>
Fri, 13 Feb 2015 15:44:19 +0000 (10:44 -0500)
committerEdward Thomson <ethomson@microsoft.com>
Fri, 13 Feb 2015 15:44:19 +0000 (10:44 -0500)
Users may want to try to pay attention to the `exec` field on all
rebase operations.

src/rebase.c
tests/rebase/iterator.c

index 2e805929ee1a8945d2695c60dd3cb71e456429e5..229b18a38f6864217262be416760140c654e14f5 100644 (file)
@@ -168,10 +168,31 @@ GIT_INLINE(int) rebase_readoid(
        return 0;
 }
 
+static git_rebase_operation *rebase_operation_alloc(
+       git_rebase *rebase,
+       git_rebase_operation_t type,
+       git_oid *id,
+       const char *exec)
+{
+       git_rebase_operation *operation;
+
+       assert((type == GIT_REBASE_OPERATION_EXEC) == !id);
+       assert((type == GIT_REBASE_OPERATION_EXEC) == !!exec);
+
+       if ((operation = git_array_alloc(rebase->operations)) == NULL)
+               return NULL;
+
+       operation->type = type;
+       git_oid_cpy((git_oid *)&operation->id, id);
+       operation->exec = exec;
+
+       return operation;
+}
+
 static int rebase_open_merge(git_rebase *rebase)
 {
        git_buf state_path = GIT_BUF_INIT, buf = GIT_BUF_INIT, cmt = GIT_BUF_INIT;
-       git_oid current_id = {{0}};
+       git_oid id;
        git_rebase_operation *operation;
        size_t i, msgnum = 0, end;
        int error;
@@ -194,7 +215,7 @@ static int rebase_open_merge(git_rebase *rebase)
                goto done;
 
        /* Read 'current' if it exists */
-       if ((error = rebase_readoid(&current_id, &buf, &state_path, CURRENT_FILE)) < 0 &&
+       if ((error = rebase_readoid(&id, &buf, &state_path, CURRENT_FILE)) < 0 &&
                error != GIT_ENOTFOUND)
                goto done;
 
@@ -203,14 +224,14 @@ static int rebase_open_merge(git_rebase *rebase)
        GITERR_CHECK_ARRAY(rebase->operations);
 
        for (i = 0; i < end; i++) {
-               operation = git_array_alloc(rebase->operations);
-               GITERR_CHECK_ALLOC(operation);
-
                git_buf_clear(&cmt);
 
                if ((error = git_buf_printf(&cmt, "cmt.%" PRIuZ, (i+1))) < 0 ||
-                       (error = rebase_readoid((git_oid *)&operation->id, &buf, &state_path, cmt.ptr)) < 0)
+                       (error = rebase_readoid(&id, &buf, &state_path, cmt.ptr)) < 0)
                        goto done;
+
+               operation = rebase_operation_alloc(rebase, GIT_REBASE_OPERATION_PICK, &id, NULL);
+               GITERR_CHECK_ALLOC(operation);
        }
 
        /* Read 'onto_name' */
@@ -553,9 +574,7 @@ static int rebase_init_operations(
                if (merge)
                        continue;
 
-               operation = git_array_alloc(rebase->operations);
-               operation->type = GIT_REBASE_OPERATION_PICK;
-               git_oid_cpy((git_oid *)&operation->id, &id);
+               operation = rebase_operation_alloc(rebase, GIT_REBASE_OPERATION_PICK, &id, NULL);
        }
 
        error = 0;
index ddf4413d39fb584f2e65b79beb23b88abbadf19b..8117a094a8b24ee661f649632facc35c00fb5f5f 100644 (file)
@@ -42,6 +42,7 @@ static void test_operations(git_rebase *rebase, size_t expected_current)
                operation = git_rebase_operation_byindex(rebase, i);
                cl_assert_equal_i(GIT_REBASE_OPERATION_PICK, operation->type);
                cl_assert_equal_oid(&expected_oid[i], &operation->id);
+               cl_assert_equal_p(NULL, operation->exec);
        }
 }