From 50b9ffdef0a83f1d5d0000c9134f7990f8fe035c Mon Sep 17 00:00:00 2001
From: Leigh B Stoller <stoller@flux.utah.edu>
Date: Mon, 25 Aug 2014 08:27:41 -0600
Subject: [PATCH] Add option to force ready/released bits to be set on an
 image. Handy.

---
 db/Image.pm.in        | 11 +++++++++++
 utils/imagerelease.in | 25 ++++++++++++++++++-------
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/db/Image.pm.in b/db/Image.pm.in
index ddd9fd5f4f..771c22ab18 100644
--- a/db/Image.pm.in
+++ b/db/Image.pm.in
@@ -1770,6 +1770,17 @@ sub SetReady($$)
 }
 sub MarkReady($)   { return SetReady($_[0], 1); }
 sub ClearReady($) { return SetReady($_[0], 0); }
+# Released bit.
+sub MarkReleased($)
+{
+    my ($self) = @_;
+
+    return -1
+	if (! $self->Update({'released' => 1}));
+
+    return 0;
+}
+
 
 # Are two images the same.
 sub SameImage($$)
diff --git a/utils/imagerelease.in b/utils/imagerelease.in
index 7e6a0940a0..f8baf38fa2 100644
--- a/utils/imagerelease.in
+++ b/utils/imagerelease.in
@@ -35,15 +35,18 @@ use File::Basename;
 #
 sub usage()
 {
-    print("Usage: imagerelease [-q] <imageid>\n" .
+    print("Usage: imagerelease [-q] [-f] [-m] <imageid>\n" .
 	  "Options:\n".
-	  "       -q      Turn on quiet mode\n");
+	  "       -q      Turn on quiet mode\n".
+	  "       -f      Force even if it make no sense.\n".
+	  "       -m      With force, just mark as ready/released.\n");
     exit(-1);
 }
-my $optlist    = "dqf";
+my $optlist    = "dqfm";
 my $debug      = 0;
 my $quiet      = 0;
 my $force      = 0;
+my $markready  = 0;
 
 #
 # Configure variables
@@ -91,6 +94,9 @@ if (defined($options{"q"})) {
 }
 if (defined($options{"f"})) {
     $force = 1;
+    if (defined($options{"m"})) {
+	$markready = 1;
+    }
 }
 usage()
     if (@ARGV != 1);
@@ -105,10 +111,6 @@ if ($UID) {
     $user_uid = $user->uid();
 }
 
-if ($UID && !$user->IsAdmin()) {
-    fatal("Only admins can release an image.");
-}
-
 my $image = Image->Lookup($imageid);
 if (!defined($image)) {
     $image = Image->LookupByName($imageid);
@@ -120,9 +122,18 @@ if ($image->released() && !$force) {
     fatal("Image is already released! ".
 	  "Maybe you need to provide imageid:version");
 }
+if ($force && $markready) {
+    print "Marking image ready/released, but not doing anything else\n";
+    $image->MarkReady();
+    $image->MarkReleased();
+    exit(0);
+}
 if (!$image->ready()) {
     fatal("Image is not ready yet!");
 }
+if ($UID && !$user->IsAdmin()) {
+    fatal("Only admins can release an image.");
+}
 
 #
 # Grab version 0 of the descriptor, which tells us if the image is really
-- 
GitLab