summaryrefslogtreecommitdiff
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
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.
-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