summaryrefslogtreecommitdiff
path: root/lib/gitlab_projects.rb
diff options
context:
space:
mode:
authorRubén Dávila <rdavila84@gmail.com>2016-03-30 18:55:59 -0500
committerRubén Dávila <rdavila84@gmail.com>2016-03-31 11:26:13 -0500
commit96b26d04fde15ff6097b1e9de797ac2ce6a0c289 (patch)
tree9b0c3da7f41ee6fed9e095541677902f7637da84 /lib/gitlab_projects.rb
parent3d769c75fe5623c50bdea7fd7b82987dc3d7d74f (diff)
downloadgitlab-shell-96b26d04fde15ff6097b1e9de797ac2ce6a0c289.tar.gz
Add new command to list tags from a remote repo.
The output of the `git ls-remote` command is written to the STDOUT so the client can read and parse the list of tags. If there is an error it's also written to STDOUT.
Diffstat (limited to 'lib/gitlab_projects.rb')
-rw-r--r--lib/gitlab_projects.rb25
1 files changed, 24 insertions, 1 deletions
diff --git a/lib/gitlab_projects.rb b/lib/gitlab_projects.rb
index 0193a18..77d70df 100644
--- a/lib/gitlab_projects.rb
+++ b/lib/gitlab_projects.rb
@@ -1,5 +1,6 @@
require 'fileutils'
require 'timeout'
+require 'open3'
require_relative 'gitlab_config'
require_relative 'gitlab_logger'
@@ -63,6 +64,7 @@ class GitlabProjects
when 'update-head'; update_head
when 'push-branches'; push_branches
when 'delete-remote-branches'; delete_remote_branches
+ when 'list-remote-tags'; list_remote_tags
when 'gc'; gc
else
$logger.warn "Attempt to execute invalid gitlab-projects command #{@command.inspect}."
@@ -73,11 +75,32 @@ class GitlabProjects
protected
+ def list_remote_tags
+ remote_name = ARGV.shift
+
+ tag_list, exit_code, error = nil
+ cmd = %W(git --git-dir=#{full_path} ls-remote --tags #{remote_name})
+
+ Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thr|
+ tag_list = stdout.read
+ error = stderr.read
+ exit_code = wait_thr.value.exitstatus
+ end
+
+ if exit_code.zero?
+ puts tag_list
+ true
+ else
+ puts error
+ false
+ end
+ end
+
def push_branches
remote_name = ARGV.shift
$logger.info "Pushing branches from #{full_path} to remote #{remote_name}: #{ARGV}"
- cmd = %W(git --git-dir=#{full_path} push --tags -- #{remote_name}).concat(ARGV)
+ cmd = %W(git --git-dir=#{full_path} push -- #{remote_name}).concat(ARGV)
pid = Process.spawn(*cmd)
begin