Merge branch '18947-githttpd'
[arvados.git] / apps / workbench / app / models / repository.rb
index 28f8f0cc91124ceafd3dfce682b140c1a740659f..fd30be946206db3c000460d85fa18e3c4a8f9fec 100644 (file)
@@ -1,6 +1,10 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
 class Repository < ArvadosBase
   def self.creatable?
-    current_user and current_user.is_admin
+    false
   end
   def attributes_for_display
     super.reject { |x| x[0] == 'fetch_url' }
@@ -48,13 +52,10 @@ class Repository < ArvadosBase
     subtree
   end
 
-  # git 2.1.4 does not use credential helpers reliably, see #5416
-  def self.disable_repository_browsing?
-    return false if Rails.configuration.use_git2_despite_bug_risk
-    if @buggy_git_version.nil?
-      @buggy_git_version = /git version 2/ =~ `git version`
-    end
-    @buggy_git_version
+  # http_fetch_url returns the first http:// or https:// url (if any)
+  # in the api response's clone_urls attribute.
+  def http_fetch_url
+    clone_urls.andand.select { |u| /^http/ =~ u }.first
   end
 
   protected
@@ -68,12 +69,6 @@ class Repository < ArvadosBase
     @fresh = true
   end
 
-  # http_fetch_url returns the first http:// or https:// url (if any)
-  # in the api response's clone_urls attribute.
-  def http_fetch_url
-    clone_urls.andand.select { |u| /^http/ =~ u }.first
-  end
-
   # run_git sets up the ARVADOS_API_TOKEN environment variable,
   # creates a local git directory for this repository if necessary,
   # executes "git --git-dir localgitdir {args to run_git}", and
@@ -81,12 +76,12 @@ class Repository < ArvadosBase
   # non-zero.
   def run_git *gitcmd
     if not @workdir
-      workdir = File.expand_path uuid+'.git', Rails.configuration.repository_cache
+      workdir = File.expand_path uuid+'.git', Rails.configuration.Workbench.RepositoryCache
       if not File.exists? workdir
-        FileUtils.mkdir_p Rails.configuration.repository_cache
+        FileUtils.mkdir_p Rails.configuration.Workbench.RepositoryCache
         [['git', 'init', '--bare', workdir],
         ].each do |cmd|
-          system *cmd
+          system(*cmd, in: "/dev/null")
           raise GitCommandError.new($?.to_s) unless $?.exitstatus == 0
         end
       end
@@ -96,19 +91,20 @@ class Repository < ArvadosBase
       "credential.#{http_fetch_url}.username", 'none'],
      ['git', '--git-dir', @workdir, 'config', '--local',
       "credential.#{http_fetch_url}.helper",
-      '!token(){ echo password="$ARVADOS_API_TOKEN"; }; token'],
+      '!cred(){ cat >/dev/null; if [ "$1" = get ]; then echo password=$ARVADOS_API_TOKEN; fi; };cred'],
      ['git', '--git-dir', @workdir, 'config', '--local',
            'http.sslVerify',
-           Rails.configuration.arvados_insecure_https ? 'false' : 'true'],
+           Rails.configuration.TLS.Insecure ? 'false' : 'true'],
      ].each do |cmd|
-      system *cmd
+      system(*cmd, in: "/dev/null")
       raise GitCommandError.new($?.to_s) unless $?.exitstatus == 0
     end
     env = {}.
       merge(ENV).
-      merge('ARVADOS_API_TOKEN' => Thread.current[:arvados_api_token])
+      merge('ARVADOS_API_TOKEN' => Thread.current[:arvados_api_token],
+            'GIT_TERMINAL_PROMPT' => '0')
     cmd = ['git', '--git-dir', @workdir] + gitcmd
-    io = IO.popen(env, cmd, err: [:child, :out])
+    io = IO.popen(env, cmd, err: [:child, :out], in: "/dev/null")
     output = io.read
     io.close
     # "If [io] is opened by IO.popen, close sets $?." --ruby 2.2.1 docs