wrongdoc 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +8 -0
- data/.gitignore +10 -0
- data/.manifest +38 -0
- data/.wrongdoc.yml +7 -0
- data/COPYING +674 -0
- data/ChangeLog +9 -0
- data/Documentation/.gitignore +4 -0
- data/Documentation/GNUmakefile +32 -0
- data/Documentation/dotwrongdoc.5.ronn +23 -0
- data/Documentation/wrongdoc.1.ronn +17 -0
- data/GIT-VERSION-FILE +1 -0
- data/GIT-VERSION-GEN +40 -0
- data/GNUmakefile +114 -0
- data/LATEST +4 -0
- data/LICENSE +17 -0
- data/NEWS +4 -0
- data/README +40 -0
- data/bin/wrongdoc +20 -0
- data/dotwrongdoc_5 +0 -0
- data/lib/wrongdoc/changelog.rb +25 -0
- data/lib/wrongdoc/final.rb +105 -0
- data/lib/wrongdoc/gemspec.rb +18 -0
- data/lib/wrongdoc/history.rb +50 -0
- data/lib/wrongdoc/merge.rb +20 -0
- data/lib/wrongdoc/news_atom.rb +46 -0
- data/lib/wrongdoc/news_rdoc.rb +30 -0
- data/lib/wrongdoc/parse_xml.rb +11 -0
- data/lib/wrongdoc/prepare.rb +17 -0
- data/lib/wrongdoc/rdoc.rb +68 -0
- data/lib/wrongdoc/rdoc_options.rb +11 -0
- data/lib/wrongdoc/readme.rb +20 -0
- data/lib/wrongdoc/release.rb +44 -0
- data/lib/wrongdoc.rb +35 -0
- data/man/man1/wrongdoc.1 +19 -0
- data/man/man5/dotwrongdoc.5 +22 -0
- data/setup.rb +1586 -0
- data/wrongdoc.gemspec +27 -0
- data/wrongdoc_1 +0 -0
- metadata +179 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
all::
|
2
|
+
|
3
|
+
RONN = ronn
|
4
|
+
ronn_man = $(RONN) -r
|
5
|
+
ronn_html = $(RONN) -f
|
6
|
+
|
7
|
+
man1 := $(addsuffix .1,wrongdoc)
|
8
|
+
html1 := $(addsuffix .html_fragment,$(man1))
|
9
|
+
man5 := $(addsuffix .5,dotwrongdoc)
|
10
|
+
html5 := $(addsuffix .html_fragment,$(man5))
|
11
|
+
man := $(man1) $(man5)
|
12
|
+
html := $(html1) $(html5)
|
13
|
+
|
14
|
+
all:: html man
|
15
|
+
|
16
|
+
html: $(html)
|
17
|
+
man: $(man)
|
18
|
+
mkdir -p ../man/man1 ../man/man5
|
19
|
+
install -m 644 $(man1) ../man/man1
|
20
|
+
install -m 644 $(man5) ../man/man5
|
21
|
+
|
22
|
+
%.1: %.1.ronn
|
23
|
+
$(ronn_man) $<
|
24
|
+
%.5: %.5.ronn
|
25
|
+
$(ronn_man) $<
|
26
|
+
%.1.html_fragment: %.1.ronn
|
27
|
+
$(ronn_html) $<
|
28
|
+
%.5.html_fragment: %.5.ronn
|
29
|
+
$(ronn_html) $<
|
30
|
+
|
31
|
+
clean::
|
32
|
+
$(RM) $(man) $(html)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
dotwrongdoc(5) -- wrongdoc config file format
|
2
|
+
=============================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
A YAML file in the top-level project directory named ".wrongdoc.yml"
|
7
|
+
|
8
|
+
## DESCRIPTION
|
9
|
+
|
10
|
+
As wrongdoc favors consistency over configuration, there is minimal
|
11
|
+
configuration to deal with.
|
12
|
+
|
13
|
+
## KEYS
|
14
|
+
|
15
|
+
`rdoc_url`, `cgit_url` should be obvious
|
16
|
+
|
17
|
+
`merge_html` is a key-value mapping of (empty) RDoc source files to an
|
18
|
+
HTML file that will be merged into RDoc after-the-fact. It is useful
|
19
|
+
for merging non-RDoc generated HTML into the project.
|
20
|
+
|
21
|
+
## SEE ALSO
|
22
|
+
|
23
|
+
wrongdoc(1)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
wrongdoc(1) -- removes JavaScript from RDoc
|
2
|
+
===========================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
`wrongdoc` prepare
|
6
|
+
|
7
|
+
`wrongdoc`
|
8
|
+
|
9
|
+
## DESCRIPTION
|
10
|
+
|
11
|
+
**Wrongdoc** does horrible things to your RDoc project. It's own
|
12
|
+
documentation sucks, but it'll help to make your documentation
|
13
|
+
JavaScript-free and therefore suck less :)
|
14
|
+
|
15
|
+
## SEE ALSO
|
16
|
+
|
17
|
+
dotwrongdoc(5)
|
data/GIT-VERSION-FILE
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
GIT_VERSION = 1.0.0
|
data/GIT-VERSION-GEN
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
GVF=GIT-VERSION-FILE
|
4
|
+
DEF_VER=v1.0.0.GIT
|
5
|
+
|
6
|
+
LF='
|
7
|
+
'
|
8
|
+
|
9
|
+
# First see if there is a version file (included in release tarballs),
|
10
|
+
# then try git-describe, then default.
|
11
|
+
if test -f version
|
12
|
+
then
|
13
|
+
VN=$(cat version) || VN="$DEF_VER"
|
14
|
+
elif test -d .git -o -f .git &&
|
15
|
+
VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
|
16
|
+
case "$VN" in
|
17
|
+
*$LF*) (exit 1) ;;
|
18
|
+
v[0-9]*)
|
19
|
+
git update-index -q --refresh
|
20
|
+
test -z "$(git diff-index --name-only HEAD --)" ||
|
21
|
+
VN="$VN-dirty" ;;
|
22
|
+
esac
|
23
|
+
then
|
24
|
+
VN=$(echo "$VN" | sed -e 's/-/./g');
|
25
|
+
else
|
26
|
+
VN="$DEF_VER"
|
27
|
+
fi
|
28
|
+
|
29
|
+
VN=$(expr "$VN" : v*'\(.*\)')
|
30
|
+
|
31
|
+
if test -r $GVF
|
32
|
+
then
|
33
|
+
VC=$(sed -e 's/^GIT_VERSION = //' <$GVF)
|
34
|
+
else
|
35
|
+
VC=unset
|
36
|
+
fi
|
37
|
+
test "$VN" = "$VC" || {
|
38
|
+
echo >&2 "GIT_VERSION = $VN"
|
39
|
+
echo "GIT_VERSION = $VN" >$GVF
|
40
|
+
}
|
data/GNUmakefile
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
# use GNU Make to run tests in parallel, and without depending on RubyGems
|
2
|
+
all::
|
3
|
+
MRI = ruby
|
4
|
+
RUBY = ruby
|
5
|
+
RAKE = rake
|
6
|
+
RSYNC = rsync
|
7
|
+
WRONGDOC := $(RUBY) -I lib bin/wrongdoc
|
8
|
+
|
9
|
+
GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
|
10
|
+
@./GIT-VERSION-GEN
|
11
|
+
-include GIT-VERSION-FILE
|
12
|
+
-include local.mk
|
13
|
+
|
14
|
+
man1_paths := $(addprefix man/man1/, wrongdoc.1)
|
15
|
+
man5_paths := $(addprefix man/man5/, dotwrongdoc.5)
|
16
|
+
manpages := $(man1_paths) $(man5_paths)
|
17
|
+
|
18
|
+
clean:
|
19
|
+
-$(MAKE) -C Documentation clean
|
20
|
+
|
21
|
+
man html:
|
22
|
+
$(MAKE) -C Documentation $@
|
23
|
+
|
24
|
+
$(manpages): man
|
25
|
+
pkg_extra := GIT-VERSION-FILE ChangeLog LATEST NEWS $(manpages)
|
26
|
+
|
27
|
+
ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
|
28
|
+
$(WRONGDOC) prepare
|
29
|
+
|
30
|
+
.manifest: ChangeLog
|
31
|
+
(git ls-files && for i in $@ $(pkg_extra); do echo $$i; done) | \
|
32
|
+
LC_ALL=C sort > $@+
|
33
|
+
mv $@+ $@
|
34
|
+
|
35
|
+
doc: .document .wrongdoc.yml man html
|
36
|
+
find bin lib -type f -name '*.rbc' -exec rm -f '{}' ';'
|
37
|
+
$(RM) -r doc
|
38
|
+
$(WRONGDOC) all
|
39
|
+
install -m644 COPYING doc/COPYING
|
40
|
+
install -m644 $(shell grep '^[A-Z]' .document) doc/
|
41
|
+
tar cf - man | (cd doc && tar xf -)
|
42
|
+
|
43
|
+
publish_doc:
|
44
|
+
-git set-file-times
|
45
|
+
$(MAKE) doc
|
46
|
+
-find doc/images -type f | \
|
47
|
+
TZ=UTC xargs touch -d '1970-01-01 00:00:01' doc/rdoc.css
|
48
|
+
chmod 644 $$(find doc -type f)
|
49
|
+
$(RSYNC) -av doc/ bogomips.org:/srv/bogomips/wrongdoc/
|
50
|
+
git ls-files | xargs touch
|
51
|
+
|
52
|
+
ifneq ($(VERSION),)
|
53
|
+
rfproject := rainbows
|
54
|
+
rfpackage := wrongdoc
|
55
|
+
pkggem := pkg/$(rfpackage)-$(VERSION).gem
|
56
|
+
pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
|
57
|
+
release_notes := release_notes-$(VERSION)
|
58
|
+
release_changes := release_changes-$(VERSION)
|
59
|
+
|
60
|
+
release-notes: $(release_notes)
|
61
|
+
release-changes: $(release_changes)
|
62
|
+
$(release_changes):
|
63
|
+
$(WRONGDOC) release_changes > $@+
|
64
|
+
$(VISUAL) $@+ && test -s $@+ && mv $@+ $@
|
65
|
+
$(release_notes):
|
66
|
+
$(WRONGDOC) release_notes > $@+
|
67
|
+
$(VISUAL) $@+ && test -s $@+ && mv $@+ $@
|
68
|
+
|
69
|
+
# ensures we're actually on the tagged $(VERSION), only used for release
|
70
|
+
verify:
|
71
|
+
test x"$(shell umask)" = x0022
|
72
|
+
git rev-parse --verify refs/tags/v$(VERSION)^{}
|
73
|
+
git diff-index --quiet HEAD^0
|
74
|
+
test `git rev-parse --verify HEAD^0` = \
|
75
|
+
`git rev-parse --verify refs/tags/v$(VERSION)^{}`
|
76
|
+
|
77
|
+
fix-perms:
|
78
|
+
-git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644
|
79
|
+
-git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755
|
80
|
+
|
81
|
+
gem: $(pkggem)
|
82
|
+
|
83
|
+
install-gem: $(pkggem)
|
84
|
+
gem install $(CURDIR)/$<
|
85
|
+
|
86
|
+
$(pkggem): .manifest fix-perms
|
87
|
+
gem build $(rfpackage).gemspec
|
88
|
+
mkdir -p pkg
|
89
|
+
mv $(@F) $@
|
90
|
+
|
91
|
+
$(pkgtgz): distdir = $(basename $@)
|
92
|
+
$(pkgtgz): HEAD = v$(VERSION)
|
93
|
+
$(pkgtgz): .manifest fix-perms
|
94
|
+
@test -n "$(distdir)"
|
95
|
+
$(RM) -r $(distdir)
|
96
|
+
mkdir -p $(distdir)
|
97
|
+
tar cf - `cat .manifest` | (cd $(distdir) && tar xf -)
|
98
|
+
cd pkg && tar cf - $(basename $(@F)) | gzip -9 > $(@F)+
|
99
|
+
mv $@+ $@
|
100
|
+
|
101
|
+
package: $(pkgtgz) $(pkggem)
|
102
|
+
|
103
|
+
release: verify package $(release_notes) $(release_changes)
|
104
|
+
rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
|
105
|
+
$(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
|
106
|
+
gem push $(pkggem)
|
107
|
+
-rubyforge add_file \
|
108
|
+
$(rfproject) $(rfpackage) $(VERSION) $(pkggem)
|
109
|
+
else
|
110
|
+
gem install-gem: GIT-VERSION-FILE
|
111
|
+
$(MAKE) $@ VERSION=$(GIT_VERSION)
|
112
|
+
endif
|
113
|
+
|
114
|
+
.PHONY: .FORCE-GIT-VERSION-FILE doc manifest man test
|
data/LATEST
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
wrongdoc is copyrighted Free Software by all contributors, see logs in
|
2
|
+
revision control for names and email addresses of all of them.
|
3
|
+
|
4
|
+
This library is free software; you can redistribute it and/or modify it
|
5
|
+
under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation; either version
|
7
|
+
{3}[http://www.gnu.org/licenses/gpl-3.0.txt] of the License, or (at
|
8
|
+
your option) any later version.
|
9
|
+
|
10
|
+
wrongdoc is distributed in the hope that it will be useful, but WITHOUT
|
11
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
12
|
+
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
13
|
+
License for more details.
|
14
|
+
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
16
|
+
along with wrongdoc; if not, write to the Free Software
|
17
|
+
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
data/NEWS
ADDED
data/README
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
= wrongdoc - RDoc done right (IMNSHO)
|
2
|
+
|
3
|
+
wrongdoc mangles an existing RDoc directory and makes any changes we
|
4
|
+
feel like. It mainly removes JavaScript from Darkfish and adds links to
|
5
|
+
a {cgit}[http://hjemli.net/git/cgit/] instance. It is a bikeshed
|
6
|
+
project and *entirely* subject to the whims of its creator, so it is
|
7
|
+
likely the wrong solution for anybody else.
|
8
|
+
|
9
|
+
wrongdoc is tightly integrated with git and cgit, and capable of of
|
10
|
+
automatically generating NEWS and ChangeLog files in RDoc format based
|
11
|
+
on git history and tags.
|
12
|
+
|
13
|
+
== Usage
|
14
|
+
|
15
|
+
First, prepare a .wrongdoc.yml in the top-level directory of your project,
|
16
|
+
then run the following command to generate your RDoc:
|
17
|
+
|
18
|
+
$ wrongdoc
|
19
|
+
|
20
|
+
== Future Plans
|
21
|
+
|
22
|
+
* Remove images/icons from Darkfish without breaking text alignment.
|
23
|
+
|
24
|
+
* Optimize for small screens at the expense of large ones.
|
25
|
+
|
26
|
+
* gitweb support (preserving cgit support)
|
27
|
+
|
28
|
+
* ASCII-art unicorns and rainbows! (maybe)
|
29
|
+
|
30
|
+
== Feedback
|
31
|
+
|
32
|
+
It's Free Software, fork it and hack it to your heart's content, just
|
33
|
+
do not expect the original author(s) to support anything they disagree
|
34
|
+
with. Remember, this is a bikeshed project!
|
35
|
+
|
36
|
+
Help with CSS for removing image/icon cruft and making better use of
|
37
|
+
small screen real-estate would be greatly appreciated.
|
38
|
+
|
39
|
+
The original authors may be contacted through the mailing list:
|
40
|
+
{wrongdoc@librelist.org}[mailto:wrongdoc@librelist.org].
|
data/bin/wrongdoc
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
usage = "Usage: #{File.basename($0)} [prepare]"
|
3
|
+
$stderr.sync = $stdout.sync = true
|
4
|
+
require 'wrongdoc'
|
5
|
+
opts = Wrongdoc.config
|
6
|
+
case ARGV[0]
|
7
|
+
when "prepare"
|
8
|
+
Wrongdoc::Prepare.new(opts).run
|
9
|
+
when "release_notes"
|
10
|
+
Wrongdoc::Release.notes($stdout, opts)
|
11
|
+
when "release_changes"
|
12
|
+
Wrongdoc::Release.changes($stdout)
|
13
|
+
when "all"
|
14
|
+
Wrongdoc::Prepare.new(opts).run
|
15
|
+
Wrongdoc::Rdoc.new(opts).run
|
16
|
+
Wrongdoc::Merge.new(opts).run
|
17
|
+
Wrongdoc::Final.new(opts, ARGV[1]).run
|
18
|
+
else
|
19
|
+
abort "#{$0.inspect} #{ARGV.inspect} not understood"
|
20
|
+
end
|
data/dotwrongdoc_5
ADDED
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# helper method for generating the ChangeLog in RDoc format atomically
|
2
|
+
module Wrongdoc::Changelog
|
3
|
+
include Wrongdoc::History
|
4
|
+
|
5
|
+
def changelog
|
6
|
+
fp = Tempfile.new('ChangeLog', '.')
|
7
|
+
fp.write "ChangeLog from #@cgit_uri"
|
8
|
+
cmd = %w(git log)
|
9
|
+
if @changelog_start && tags[0]
|
10
|
+
range = "#@changelog_start..#{tags[0][:tag]}"
|
11
|
+
fp.write(" (#{range})")
|
12
|
+
cmd << range
|
13
|
+
end
|
14
|
+
fp.write("\n\n")
|
15
|
+
prefix = " "
|
16
|
+
IO.popen(cmd.join(' ')) do |io|
|
17
|
+
io.each { |line|
|
18
|
+
fp.write prefix
|
19
|
+
fp.write line
|
20
|
+
}
|
21
|
+
end
|
22
|
+
File.rename(fp.path, 'ChangeLog')
|
23
|
+
fp.close!
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
class Wrongdoc::Final
|
5
|
+
include Wrongdoc::ParseXML
|
6
|
+
include Wrongdoc::NewsAtom
|
7
|
+
|
8
|
+
def run
|
9
|
+
Find.find('doc') { |path| /\.html\z/ =~ path and fix(path) }
|
10
|
+
FileUtils.rm_rf('doc/js')
|
11
|
+
news_atom
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(opts, git_tag = nil)
|
15
|
+
@cgit_uri = URI.parse(opts[:cgit_url])
|
16
|
+
@rdoc_uri = URI.parse(opts[:rdoc_url])
|
17
|
+
@git_tag = git_tag
|
18
|
+
end
|
19
|
+
|
20
|
+
# returns a cgit URI for the given +path+ and +lineno+
|
21
|
+
def path_uri(path, lineno)
|
22
|
+
uri = @cgit_uri.dup
|
23
|
+
uri.path += "/tree/#{URI.escape(path)}"
|
24
|
+
uri.fragment = "n#{lineno}"
|
25
|
+
uri.query = "id=#{URI.escape(@git_tag)}" if @git_tag
|
26
|
+
uri
|
27
|
+
end
|
28
|
+
|
29
|
+
# delete all the stuff that offends us
|
30
|
+
def killkillkill!(doc)
|
31
|
+
unlink = proc { |node| node.unlink }
|
32
|
+
|
33
|
+
# JavaScript is dangerous
|
34
|
+
doc.search("script").each(&unlink)
|
35
|
+
|
36
|
+
# if your project's big enough to need JS search, it's too bloated
|
37
|
+
doc.search('span.search-toggle').each(&unlink)
|
38
|
+
doc.search('form').each(&unlink)
|
39
|
+
|
40
|
+
# remove W3C validator link, we use tidy instead
|
41
|
+
doc.search('div#validator-badges p').each { |x|
|
42
|
+
/Validate/i =~ x.content and x.unlink
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
# since we killed off JavaScript, viewing source isn't possible with
|
47
|
+
# RDoc anymore, so link people to the web source viewer
|
48
|
+
def source_linkify!(doc)
|
49
|
+
doc.search('div.method-detail').each { |mdetail|
|
50
|
+
path = lineno = nil
|
51
|
+
mdetail.search('div.method-source-code').each { |src|
|
52
|
+
src.search('span.ruby-comment').each { |x|
|
53
|
+
if x.content =~ /File\s+(\S+),\s+line\s+(\d+)/s
|
54
|
+
path, lineno = $1, $2
|
55
|
+
end
|
56
|
+
}
|
57
|
+
src.unlink if path && lineno
|
58
|
+
}
|
59
|
+
if path && lineno
|
60
|
+
mdetail.search('span.method-click-advice').each { |x|
|
61
|
+
x.content = ''
|
62
|
+
a = Nokogiri::XML::Node.new('a', doc)
|
63
|
+
a['href'] = path_uri(path, lineno).to_s
|
64
|
+
a.content = 'view method source'
|
65
|
+
x.add_child(a)
|
66
|
+
}
|
67
|
+
end
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
# Don't give the original Darkfish a bad name, and advertise ourselves :)
|
72
|
+
def advertise!(doc)
|
73
|
+
doc.search('div#validator-badges p small').each { |x|
|
74
|
+
if /\AGenerated/ =~ x.content
|
75
|
+
first = x.children.first
|
76
|
+
first.content = first.content.gsub /\AG/, "Originally g"
|
77
|
+
last = x.children.last
|
78
|
+
last.content = "#{last.content}, modified by "
|
79
|
+
|
80
|
+
a = Nokogiri::XML::Node.new('a', doc)
|
81
|
+
a["href"] = "http://bogomips.org/wrongdoc/"
|
82
|
+
a.content = "wrongdoc"
|
83
|
+
last.add_next_sibling(a)
|
84
|
+
end
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
def fix(file)
|
89
|
+
File.open(file, "a+") do |fp|
|
90
|
+
buf = process(fp.read)
|
91
|
+
fp.truncate 0
|
92
|
+
fp.write buf
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# the main entry point, this does all the require processing on any
|
97
|
+
# given String buffer.
|
98
|
+
def process(str)
|
99
|
+
doc = parse_xml(str)
|
100
|
+
killkillkill!(doc)
|
101
|
+
source_linkify!(doc)
|
102
|
+
advertise!(doc)
|
103
|
+
doc.to_xhtml(:indent => 0)
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# helper methods for gemspecs
|
2
|
+
module Wrongdoc::Gemspec
|
3
|
+
include Wrongdoc::Readme
|
4
|
+
include Wrongdoc::RdocOptions
|
5
|
+
|
6
|
+
def extra_rdoc_files(manifest)
|
7
|
+
File.readlines('.document').map! do |x|
|
8
|
+
x.chomp!
|
9
|
+
if File.directory?(x)
|
10
|
+
manifest.grep(%r{\A#{x}/})
|
11
|
+
elsif File.file?(x)
|
12
|
+
x
|
13
|
+
else
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
end.flatten.compact
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Wrongdoc::History
|
2
|
+
def initialize_history
|
3
|
+
@tags = @old_summaries = nil
|
4
|
+
end
|
5
|
+
|
6
|
+
# returns a cgit URI for a given +tag_name+
|
7
|
+
def tag_uri(tag_name)
|
8
|
+
uri = @cgit_uri.dup
|
9
|
+
uri.path = "/tag/"
|
10
|
+
uri.query = "id=#{tag_name}"
|
11
|
+
uri
|
12
|
+
end
|
13
|
+
|
14
|
+
# TODO: investigate Ruby git libraries
|
15
|
+
def tags
|
16
|
+
timefmt = '%Y-%m-%dT%H:%M:%SZ'
|
17
|
+
@tags ||= `git tag -l`.split(/\n/).map do |tag|
|
18
|
+
next if tag == "v0.0.0"
|
19
|
+
if %r{\Av[\d\.]+} =~ tag
|
20
|
+
header, subject, body = `git cat-file tag #{tag}`.split(/\n\n/, 3)
|
21
|
+
header = header.split(/\n/)
|
22
|
+
tagger = header.grep(/\Atagger /).first
|
23
|
+
body ||= "initial"
|
24
|
+
time = Time.at(tagger.split(/ /)[-2].to_i).utc
|
25
|
+
{
|
26
|
+
:time => time.strftime(timefmt),
|
27
|
+
:ruby_time => time,
|
28
|
+
:tagger_name => %r{^tagger ([^<]+)}.match(tagger)[1].strip,
|
29
|
+
:tagger_email => %r{<([^>]+)>}.match(tagger)[1].strip,
|
30
|
+
:id => `git rev-parse refs/tags/#{tag}`.chomp!,
|
31
|
+
:tag => tag,
|
32
|
+
:subject => subject,
|
33
|
+
:body => (old = old_summaries[tag]) ? "#{old}\n#{body}" : body,
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end.compact.sort { |a,b| b[:time] <=> a[:time] }
|
37
|
+
end
|
38
|
+
|
39
|
+
def old_summaries
|
40
|
+
@old_summaries ||= if File.exist?(".CHANGELOG.old")
|
41
|
+
File.readlines(".CHANGELOG.old").inject({}) do |hash, line|
|
42
|
+
version, summary = line.split(/ - /, 2)
|
43
|
+
hash[version] = summary
|
44
|
+
hash
|
45
|
+
end
|
46
|
+
else
|
47
|
+
{}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Wrongdoc::Merge
|
2
|
+
include Wrongdoc::ParseXML
|
3
|
+
|
4
|
+
def initialize(opts)
|
5
|
+
@merge_html = opts[:merge_html]
|
6
|
+
end
|
7
|
+
|
8
|
+
def run
|
9
|
+
@merge_html.each do |file, source|
|
10
|
+
rdoc_html = "doc/#{file}.html"
|
11
|
+
src = Nokogiri::XML(File.read(source))
|
12
|
+
File.open(rdoc_html, "a+") { |fp|
|
13
|
+
doc = parse_xml(fp.read)
|
14
|
+
doc.search("div#documentation")[0].add_child(src.root)
|
15
|
+
fp.truncate 0
|
16
|
+
fp.write doc.to_xhtml
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Wrongdoc::NewsAtom
|
2
|
+
include Wrongdoc::History
|
3
|
+
include Wrongdoc::Readme
|
4
|
+
|
5
|
+
# generates an Atom feed based on git tags in the document directory
|
6
|
+
def news_atom
|
7
|
+
project_name, short_desc, _ = x = readme_metadata
|
8
|
+
new_tags = tags[0,10]
|
9
|
+
atom_uri = @rdoc_uri.dup
|
10
|
+
atom_uri.path += "NEWS.atom.xml"
|
11
|
+
news_uri = @rdoc_uri.dup
|
12
|
+
news_uri.path += "NEWS.html"
|
13
|
+
doc = Nokogiri::XML::Builder.new {
|
14
|
+
feed :xmlns => "http://www.w3.org/2005/Atom" do
|
15
|
+
id! atom_uri.to_s
|
16
|
+
title "#{project_name} news"
|
17
|
+
subtitle short_desc
|
18
|
+
link! :rel => 'alternate', :type => 'text/html', :href => news_uri.to_s
|
19
|
+
updated new_tags.empty? ? '1970-01-01:00:00:00Z' : new_tags[0][:time]
|
20
|
+
new_tags.each do |tag|
|
21
|
+
entry {
|
22
|
+
title tag[:subject]
|
23
|
+
updated tag[:time]
|
24
|
+
published tag[:time]
|
25
|
+
author {
|
26
|
+
name tag[:tagger_name]
|
27
|
+
email tag[:tagger_email]
|
28
|
+
}
|
29
|
+
uri = tag_uri(tag[:tag]).to_s
|
30
|
+
link! :rel => "alternate", :type => "text/html", :href => uri
|
31
|
+
id! uri
|
32
|
+
message_only = tag[:body].split(/\n.+\(\d+\):\n {6}/s)[0].strip
|
33
|
+
content({:type =>:text}, message_only)
|
34
|
+
content(:type =>:xhtml) { pre tag[:body] }
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
}
|
39
|
+
fpath = "doc/NEWS.atom.xml"
|
40
|
+
File.open(fpath, "w") { |fp| fp.write doc.to_xml(:indent => 0) }
|
41
|
+
unless new_tags.empty?
|
42
|
+
time = new_tags[0][:ruby_time]
|
43
|
+
File.utime(time, time, fpath)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Wrongdoc::NewsRdoc
|
3
|
+
include Wrongdoc::History
|
4
|
+
|
5
|
+
def puts_tag(fp, tag)
|
6
|
+
time = tag[:time].tr!('T', ' ').gsub!(/:\d\dZ/, ' UTC')
|
7
|
+
fp.puts "=== #{tag[:subject]} / #{time}"
|
8
|
+
fp.puts ""
|
9
|
+
|
10
|
+
body = tag[:body]
|
11
|
+
fp.puts tag[:body].gsub(/^/smu, " ").gsub(/[ \t]+$/smu, "")
|
12
|
+
fp.puts ""
|
13
|
+
end
|
14
|
+
|
15
|
+
# generates a NEWS file in the top-level directory based on git tags
|
16
|
+
def news_rdoc
|
17
|
+
news = Tempfile.new('NEWS', '.')
|
18
|
+
tags.each { |tag| puts_tag(news, tag) }
|
19
|
+
File.open("LATEST", "wb") { |latest|
|
20
|
+
if tags.empty?
|
21
|
+
latest.puts "Currently unreleased"
|
22
|
+
news.puts "No news yet."
|
23
|
+
else
|
24
|
+
puts_tag(latest, tags[0])
|
25
|
+
end
|
26
|
+
}
|
27
|
+
File.rename(news.path, 'NEWS')
|
28
|
+
news.close!
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Wrongdoc::Prepare
|
2
|
+
include Wrongdoc::NewsRdoc
|
3
|
+
include Wrongdoc::Changelog
|
4
|
+
include Wrongdoc::Readme
|
5
|
+
|
6
|
+
def initialize(opts)
|
7
|
+
@rdoc_uri = URI.parse(opts[:rdoc_url])
|
8
|
+
@cgit_uri = URI.parse(opts[:cgit_url])
|
9
|
+
@changelog_start = opts[:changelog_start]
|
10
|
+
@name, @short_desc = readme_metadata
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
news_rdoc
|
15
|
+
changelog
|
16
|
+
end
|
17
|
+
end
|