[PATCH v2 11/44] ruby: request-pull: rewrite perl script

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ruby can do it just fine, no need for perl.

Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx>
---

Notes:
    I'm mostly ignoring the comment, my hope is that it would be redundant, as the
    code would be self-documenting.

 git-request-pull.rb | 65 +++++++++++++++++++++++++----------------------------
 1 file changed, 30 insertions(+), 35 deletions(-)

diff --git a/git-request-pull.rb b/git-request-pull.rb
index 60cf6ce..eee2e28 100755
--- a/git-request-pull.rb
+++ b/git-request-pull.rb
@@ -14,6 +14,35 @@ EOF
   exit 1
 end
 
+def abbr(ref)
+  if (ref =~ %r{^refs/heads/(.*)} || ref =~ %r{^refs/(tags/.*)})
+    return $1
+  end
+  return ref
+end
+
+# $head is the token given from the command line, and $tag_name, if
+# exists, is the tag we are going to show the commit information for.
+# If that tag exists at the remote and it points at the commit, use it.
+# Otherwise, if a branch with the same name as $head exists at the remote
+# and their values match, use that instead.
+#
+# Otherwise find a random ref that matches $headrev.
+
+def get_ref(url, headref, headrev, tag_name)
+  found = nil
+  IO.popen(%[git ls-remote "#{url}"]) do |out|
+    out.each do |l|
+      sha1, ref, deref = l.scan(/^(\S+)\s+(\S+?)(\^\{\})?$/).first
+      next unless sha1 == headrev
+      found = abbr(ref)
+      break if (deref && ref == "refs/tags/#{tag_name}")
+      break if ref == headref
+    end
+  end
+  return found
+end
+
 until ARGV.empty?
   case ARGV.first
   when '-p'
@@ -57,41 +86,7 @@ die "Not a valid revision: #{head}" if headrev.empty?
 merge_base = `git merge-base #{baserev} #{headrev}`.chomp
 die "No commits in common between #{base} and #{head}" unless $?.success?
 
-# $head is the token given from the command line, and $tag_name, if
-# exists, is the tag we are going to show the commit information for.
-# If that tag exists at the remote and it points at the commit, use it.
-# Otherwise, if a branch with the same name as $head exists at the remote
-# and their values match, use that instead.
-#
-# Otherwise find a random ref that matches $headrev.
-find_matching_ref='
-	sub abbr {
-		my $ref = shift;
-		if ($ref =~ s|^refs/heads/|| || $ref =~ s|^refs/tags/|tags/|) {
-			return $ref;
-		} else {
-			return $ref;
-		}
-	}
-
-	my ($found);
-	while (<STDIN>) {
-		my ($sha1, $ref, $deref) = /^(\S+)\s+(\S+?)(\^\{\})?$/;
-		next unless ($sha1 eq $ARGV[1]);
-		$found = abbr($ref);
-		if ($deref && $ref eq "refs/tags/$ARGV[2]") {
-			last;
-		}
-		if ($ref eq $ARGV[0]) {
-			last;
-		}
-	}
-	if ($found) {
-		print "$found\n";
-	}
-'
-
-ref = `git ls-remote "#{url}" | perl -e '#{find_matching_ref}' "#{headref}" "#{headrev}" "#{tag_name}"`.chomp
+ref = get_ref(url, headref, headrev, tag_name) || ''
 url = `git ls-remote --get-url "#{url}"`.chomp
 
 begin
-- 
1.8.4-fc

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]