Blob Blame History Raw
From 76ae779635afcd3984dedc57fa7c0e80c6410bba Mon Sep 17 00:00:00 2001
From: Colin Walters <walters@verbum.org>
Date: Fri, 29 Mar 2019 14:39:34 +0000
Subject: [PATCH] rebase: Support identical checksum rebases

Change things to only throw this error for non-checksum rebases; for
RHEL CoreOS + https://github.com/openshift/pivot/
we've had it happen that the same ostree commit can end up
in separate oscontainers.  We want to support changing
the custom origin that might point to the same commit.
---
 src/daemon/rpmostreed-transaction-types.c | 12 +++++++++---
 src/daemon/rpmostreed-utils.c             | 10 ----------
 2 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/src/daemon/rpmostreed-transaction-types.c b/src/daemon/rpmostreed-transaction-types.c
index 9edfeecb..86112d1b 100644
--- a/src/daemon/rpmostreed-transaction-types.c
+++ b/src/daemon/rpmostreed-transaction-types.c
@@ -100,9 +100,6 @@ change_origin_refspec (GVariantDict    *options,
                                          error))
     return FALSE;
 
-  if (strcmp (current_refspec, new_refspec) == 0)
-    return glnx_throw (error, "Old and new refs are equal: %s", new_refspec);
-
   /* Re-classify after canonicalization to ensure we handle TYPE_CHECKSUM */
   if (!rpmostree_refspec_classify (new_refspec, &refspectype, &refspecdata, error))
     return FALSE;
@@ -128,6 +125,15 @@ change_origin_refspec (GVariantDict    *options,
     }
   else
     {
+      /* We only throw this error for non-checksum rebases; for
+       * RHEL CoreOS + https://github.com/openshift/pivot/
+       * we've had it happen that the same ostree commit can end up
+       * in separate oscontainers.  We want to support changing
+       * the custom origin that might point to the same commit.
+       */
+      if (strcmp (current_refspec, new_refspec) == 0)
+        return glnx_throw (error, "Old and new refs are equal: %s", new_refspec);
+
       if (!rpmostree_origin_set_rebase (origin, new_refspec, error))
         return FALSE;
     }
diff --git a/src/daemon/rpmostreed-utils.c b/src/daemon/rpmostreed-utils.c
index 686965a3..19b45a01 100644
--- a/src/daemon/rpmostreed-utils.c
+++ b/src/daemon/rpmostreed-utils.c
@@ -202,16 +202,6 @@ rpmostreed_refspec_parse_partial (const gchar *new_provided_refspec,
         }
     }
 
-  if (g_strcmp0 (origin_remote, remote) == 0 &&
-      g_strcmp0 (origin_ref, ref) == 0)
-    {
-      g_set_error (error, RPM_OSTREED_ERROR,
-                   RPM_OSTREED_ERROR_INVALID_REFSPEC,
-                   "Old and new refs are equal: %s:%s",
-                   remote, ref);
-      return FALSE;
-    }
-
   if (remote == NULL)
       *out_refspec = g_steal_pointer (&ref);
   else
-- 
2.20.1