8000 Create a version without needing Nokogiri · marcotc/jruby-dev-builder@fae5d84 · GitHub
[go: up one dir, main page]

Skip to content

Commit fae5d84

Browse files
committed
Create a version without needing Nokogiri
* Which means no dependencies are needed to run this script.
1 parent 549c071 commit fae5d84

File tree

2 files changed

+87
-6
lines changed

2 files changed

+87
-6
lines changed

find-jruby-head-url-nokogiri.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
require 'open-uri'
2+
require 'nokogiri'
3+
4+
base_url = 'https://oss.sonatype.org/content/repositories/snapshots/org/jruby/jruby-dist'
5+
index_url = "#{base_url}/maven-metadata.xml"
6+
7+
STDERR.puts index_url
8+
xml = URI.open(index_url, &:read)
9+
STDERR.puts xml
10+
11+
versions = Nokogiri::XML(xml).css('version').map(&:text)
12+
most_recent = (versions - %w[9000.dev-SNAPSHOT]).last
13+
14+
builds_url = "#{base_url}/#{most_recent}/maven-metadata.xml"
15+
STDERR.puts builds_url
16+
xml = URI.open(builds_url, &:read)
17+
STDERR.puts xml
18+
19+
last_build = Nokogiri::XML(xml).css('snapshotVersion').select { |node|
20+
classifier = node.at('classifier')
21+
classifier and classifier.text == 'bin' and node.at('extension').text == 'tar.gz'
22+
}.map { |node| node.at('value').text }.last
23+
24+
final_url = "#{base_url}/#{most_recent}/jruby-dist-#{last_build}-bin.tar.gz"
25+
puts final_url

find-jruby-head-url.rb

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,60 @@
11
require 'open-uri'
2-
require 'nokogiri'
2+
3+
module MicroXMLParser
4+
HEADER = %r{<\?xml\s.+\?>\n}
5+
ATTRIBUTE = %r{(\w+)="([^"]+)"}
6+
OPEN_TAG = %r{<(\w+)((?:\s+#{ATTRIBUTE})*)>}
7+
CLOSE_TAG = %r{</(\w+)>}
8+
TEXT = %r{([^<]*)}
9+
10+
def self.parse(xml)
11+
xml = xml.strip
12+
raise xml unless xml.start_with? HEADER
13+
xml = xml[$&.size..-1].strip
14+
value, rest = rec(xml)
15+
raise rest unless rest.empty?
16+
value
17+
end
18+
19+
def self.rec(xml)
20+
xml = xml.strip
21+
if xml.start_with? OPEN_TAG
22+
entries = []
23+
while xml.start_with? OPEN_TAG
24+
tag, attributes = $1, $2
25+
xml = xml[$&.size..-1].strip
26+
27+
until attributes.empty?
28+
attributes = attributes.strip
29+
raise attributes unless attributes.start_with? ATTRIBUTE
30+
key, value = $1, $2
31+
attributes = attributes[$&.size..-1]
32+
entries << { key.to_sym => value }
33+
end
34+
35+
value, xml = rec(xml)
36+
entries << { tag.to_sym => value }
37+
38+
close_tag = "</#{tag}>"
39+
raise "Missing close tag #{close_tag}: #{xml}" unless xml.start_with? close_tag
40+
xml = xml[close_tag.size..-1].strip
41+
end
42+
43+
keys = entries.map { |entry| entry.first.first }
44+
if keys == keys.uniq
45+
entries = entries.inject({}, :merge)
46+
end
47+
48+
[entries, xml]
49+
elsif xml.start_with? TEXT
50+
text = $1
51+
xml = xml[$&.size..-1]
52+
[text, xml]
53+
else
54+
raise xml
55+
end
56+
end
57+
end
358

459
base_url = 'https://oss.sonatype.org/content/repositories/snapshots/org/jruby/jruby-dist'
560
index_url = "#{base_url}/maven-metadata.xml"
@@ -8,18 +63,19 @@
863
xml = URI.open(index_url, &:read)
964
STDERR.puts xml
1065

11-
versions = Nokogiri::XML(xml).css('version').map(&:text)
66+
parsed = MicroXMLParser.parse(xml)
67+
versions = parsed.dig(:metadata, :versioning, :versions).map { |e| e[:version] }
1268
most_recent = (versions - %w[9000.dev-SNAPSHOT]).last
1369

1470
builds_url = "#{base_url}/#{most_recent}/maven-metadata.xml"
1571
STDERR.puts builds_url
1672
xml = URI.open(builds_url, &:read)
1773
STDERR.puts xml
1874

19-
last_build = Nokogiri::XML(xml).css('snapshotVersion').select { |node|
20-
classifier = node.at('classifier')
21-
classifier and classifier.text == 'bin' and node.at('extension').text == 'tar.gz'
22-
}.map { |node| node.at('value').text }.last
75+
parsed = MicroXMLParser.parse(xml)
76+
last_build = parsed.dig(:metadata, :versioning, :snapshotVersions).map { |e| e[:snapshotVersion] }.select { |node|
77+
node[:classifier] == 'bin' and node[:extension] == 'tar.gz'
78+
}.map { |node| node[:value] }.last
2379

2480
final_url = "#{base_url}/#{most_recent}/jruby-dist-#{last_build}-bin.tar.gz"
2581
puts final_url

0 commit comments

Comments
 (0)
0