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