diff options
author | Rubén Dávila <rdavila84@gmail.com> | 2016-03-30 18:55:59 -0500 |
---|---|---|
committer | Rubén Dávila <rdavila84@gmail.com> | 2016-03-31 11:26:13 -0500 |
commit | 96b26d04fde15ff6097b1e9de797ac2ce6a0c289 (patch) | |
tree | 9b0c3da7f41ee6fed9e095541677902f7637da84 /lib/gitlab_projects.rb | |
parent | 3d769c75fe5623c50bdea7fd7b82987dc3d7d74f (diff) | |
download | gitlab-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.rb | 25 |
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 |