-
Notifications
You must be signed in to change notification settings - Fork 9
/
update_from_meta.rb
67 lines (54 loc) · 1.69 KB
/
update_from_meta.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
require 'json'
require 'open-uri'
$existing_modules = File.read('.gitmodules')
.split("\n")
.map{ |line|
if line =~ /url =(.*)/
name = $1.strip
name.sub!(".git", "")
name.sub!(/http[s]?:\/\//, "")
end
}
.compact
def ensure_repo(title, topic_url)
return if title =~ /about the theme category/i
result = open(topic_url).read
json = JSON.parse(result)
op_body = json["post_stream"]["posts"][0]["cooked"]
first_github = nil
op_body.scan(/href=['"](http[^'"]+github[^'"]+)/i) do
first_github = $1
unless first_github =~ /issuecomment/
break
end
end
if first_github
if $existing_modules.any?{|m| first_github.include?(m)}
return
end
end
if first_github
puts "Add #{title}: #{first_github} (Y/n)"
text = readline
unless text =~ /n/
name = first_github.sub(".git", "").split("/").last
cmd = "git submodule add #{first_github} themes/#{name}"
puts cmd
puts `#{cmd}`
end
end
end
url = 'https://meta.discourse.org/c/theme/none.json'
begin
result = open(url).read
json = JSON.parse(result)
topic_list = json["topic_list"]
topics = topic_list["topics"]
topics.each do |topic|
topic_url = "https://meta.discourse.org/t/#{topic["slug"]}/#{topic["id"]}.json"
ensure_repo(topic["title"], topic_url)
end
break unless topic_list["more_topics_url"]
url = "https://meta.discourse.org#{topic_list["more_topics_url"]}"
url = url.sub("latest", "latest.json")
end while topics.length > 0