Merge branch '14596-check-container-locked'
[arvados.git] / services / api / app / models / commit.rb
index 959a9f26793bd8e952092b5addb357ec86fc185f..921c690cd00f78f6fc2b46bbace23fff89992db8 100644 (file)
@@ -2,10 +2,12 @@
 #
 # SPDX-License-Identifier: AGPL-3.0
 
+require 'request_error'
+
 class Commit < ActiveRecord::Base
   extend CurrentApiClient
 
-  class GitError < StandardError
+  class GitError < RequestError
     def http_status
       422
     end
@@ -173,6 +175,11 @@ class Commit < ActiveRecord::Base
         branch = m[1]
         must_git(dst_gitdir,
                  "fetch file://#{src_gitdir.shellescape} #{branch.shellescape}")
+        # Even if all of the above steps succeeded, we might still not
+        # have the right commit due to a race, in which case tag_cmd
+        # will fail, and we'll need to fall back to pack|unpack. So
+        # don't be tempted to condense this tag_cmd and the one in the
+        # rescue block into a single attempt.
         must_git(dst_gitdir, tag_cmd)
       rescue GitError
         must_pipe("echo #{sha1.shellescape}",
@@ -214,7 +221,7 @@ class Commit < ActiveRecord::Base
   end
 
   def self.cache_dir_base
-    Rails.root.join 'tmp', 'git'
+    Rails.root.join 'tmp', 'git-cache'
   end
 
   def self.fetch_remote_repository gitdir, git_url