From 5cb4c24fad2e50f624d486792d32e709c099cf2e Mon Sep 17 00:00:00 2001 From: Bastian Kleineidam Date: Mon, 17 Dec 2012 21:28:20 +0100 Subject: [PATCH] Build updates --- MANIFEST.in | 3 +- Makefile | 99 +++- doc/Makefile | 15 +- doc/dosage.1 | 2 +- doc/dosage.1.html | 6 +- doc/dosage.1.html.diff | 22 + doc/dosage.txt | 160 ++++++ doc/testresults.html | 1086 ++++++++++++++++++++-------------------- scripts/mktestpage.py | 37 +- setup.py | 12 + 10 files changed, 837 insertions(+), 605 deletions(-) create mode 100644 doc/dosage.1.html.diff create mode 100644 doc/dosage.txt diff --git a/MANIFEST.in b/MANIFEST.in index c606bfce9..0a3900e71 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,7 +1,6 @@ include MANIFEST.in include COPYING Makefile requirements.txt -include *.bat include doc/Makefile doc/*.txt doc/*.1 doc/*.html include doc/css/*.css doc/js/*.js -include scripts/*.py scripts/*.sh +include scripts/*.py scripts/*.sh scripts/*.bat recursive-include tests *.py diff --git a/Makefile b/Makefile index faa115125..8b895e7d0 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,18 @@ PYVER:=2.7 PYTHON:=python$(PYVER) VERSION:=$(shell $(PYTHON) setup.py --version) -ARCHIVE:=dosage-$(VERSION).tar.gz +MAINTAINER:=$(shell $(PYTHON) setup.py --maintainer) +AUTHOR:=$(shell $(PYTHON) setup.py --author) +APPNAME:=$(shell $(PYTHON) setup.py --name) +LAPPNAME:=$(shell echo $(APPNAME)|tr "[A-Z]" "[a-z]") +ARCHIVE_SOURCE:=$(LAPPNAME)-$(VERSION).tar.gz +ARCHIVE_WIN32:=$(LAPPNAME)-$(VERSION).exe +GITUSER:=wummel +GITREPO:=$(LAPPNAME) +HOMEPAGE:=$(HOME)/public_html/$(LAPPNAME).git +DEBUILDDIR:=$(HOME)/projects/debian/unofficial +DEBORIGFILE:=$(DEBUILDDIR)/$(LAPPNAME)_$(VERSION).orig.tar.gz +DEBPACKAGEDIR:=$(DEBUILDDIR)/$(LAPPNAME)-$(VERSION) PY_FILES_DIRS := dosage dosagelib scripts tests PY2APPOPTS ?= # Default pytest options: @@ -24,32 +35,57 @@ chmod: find . -type d -exec chmod 755 {} \; dist: - git archive --format=tar --prefix=dosage-$(VERSION)/ HEAD | gzip -9 > ../$(ARCHIVE) - [ -f ../$(ARCHIVE).sha1 ] || sha1sum ../$(ARCHIVE) > ../$(ARCHIVE).sha1 - [ -f ../$(ARCHIVE).asc ] || gpg --detach-sign --armor ../$(ARCHIVE) + [ -d dist ] || mkdir dist + git archive --format=tar --prefix=$(LAPPNAME)-$(VERSION)/ HEAD | gzip -9 > dist/$(ARCHIVE_SOURCE) + [ ! -f ../$(ARCHIVE_WIN32) ] || cp ../$(ARCHIVE_WIN32) dist -doc/dosage.1.html: doc/dosage.1 - man2html -r $< | tail -n +2 | sed 's/Time:.*//g' | sed 's@/:@/@g' > $@ +sign: + [ -f dist/$(ARCHIVE_SOURCE).asc ] || gpg --detach-sign --armor dist/$(ARCHIVE_SOURCE) + [ -f dist/$(ARCHIVE_WIN32).asc ] || gpg --detach-sign --armor dist/$(ARCHIVE_WIN32) -release: distclean releasecheck dist - git tag v$(VERSION) +upload: + github-upload $(GITUSRE) $(GITREPO) \ + dist/$(ARCHIVE_SOURCE) dist/$(ARCHIVE_WIN32) \ + dist/$(ARCHIVE_SOURCE).asc dist/$(ARCHIVE_WIN32).asc + +testresults: + scripts/mktestpage.py testresults.txt > $(HOMEPAGE)/content/testresults.html + +homepage: +# update metadata + @echo "version: $(VERSION)" > $(HOMEPAGE)/info.yaml + @echo "name: $(APPNAME)" >> $(HOMEPAGE)/info.yaml + @echo "lname: $(LAPPNAME)" >> $(HOMEPAGE)/info.yaml + @echo "maintainer: $(MAINTAINER)" >> $(HOMEPAGE)/info.yaml + @echo "author: $(AUTHOR)" >> $(HOMEPAGE)/info.yaml +# generate static files + $(MAKE) -C doc + cp doc/$(LAPPNAME).1.html $(HOMEPAGE)/content + make -C $(HOMEPAGE) gen + +release: distclean releasecheck dist sign upload homepage tag register + +tag: + git tag upstream/$(VERSION) + git push --tags origin upstream/$(VERSION) + +register: @echo "Register at Python Package Index..." $(PYTHON) setup.py register - freecode-submit < dosage.freecode - + @echo "Submit to freecode..." + freecode-submit < $(LAPPNAME).freecode releasecheck: check @if egrep -i "xx\.|xxxx|\.xx" doc/changelog.txt > /dev/null; then \ echo "Could not release: edit doc/changelog.txt release date"; false; \ fi -# @if ! grep "Version: $(VERSION)" dosage.freecode > /dev/null; then \ -# echo "Could not release: edit dosage.freecode version"; false; \ -# fi + @if ! grep "Version: $(VERSION)" $(LAPPNAME).freecode > /dev/null; then \ + echo "Could not release: edit $(LAPPNAME).freecode version"; false; \ + fi # The check programs used here are mostly local scripts on my private system. # So for other developers there is no need to execute this target. check: - [ ! -d .svn ] || check-nosvneolstyle -v check-copyright check-pofiles -v py-tabdaddy @@ -67,7 +103,7 @@ pyflakes: pyflakes $(PY_FILES_DIRS) count: - @sloccount $(PY_FILES_DIRS) | grep "Total Physical Source Lines of Code" + @sloccount $(PY_FILES_DIRS) clean: find . -name \*.pyc -delete @@ -75,8 +111,8 @@ clean: rm -rf build dist distclean: clean - rm -rf build dist Dosage.egg-info dosage.prof test.sh testresults.txt - rm -f _Dosage_configdata.py MANIFEST + rm -rf build dist $(APPNAME).egg-info dosage.prof test.sh testresults.txt + rm -f _$(APPNAME)_configdata.py MANIFEST localbuild: $(PYTHON) setup.py build @@ -84,11 +120,32 @@ localbuild: test: localbuild env LANG=en_US.utf-8 http_proxy="" $(PYTHON) -m pytest $(PYTESTOPTS) $(TESTOPTS) $(TESTS) +doc/$(LAPPNAME).txt: doc/$(LAPPNAME).1 +# make text file from man page for Windows builds + cols=`stty size | cut -d" " -f2`; stty cols 72; man -l $< | sed -e 's/.\cH//g' > $@; stty cols $$cols + deb: - git-buildpackage --git-upstream-branch=master --git-debian-branch=debian --git-ignore-new +# build a debian package + [ -f $(DEBORIGFILE) ] || cp dist/$(ARCHIVE_SOURCE) $(DEBORIGFILE) $(DEBUILDDIR)/$(LAPPNAME)_$(VERSION).orig.tar.gz + sed -i 's/VERSION:=.*/VERSION:=$(VERSION)/' $(DEBUILDDIR)/$(LAPPNAME).mak + [ -d $(DEBPACKAGEDIR) ] || (cd $(DEBUILDDIR); \ + patool extract $(DEBORIGFILE); \ + cd $(CURDIR); \ + git checkout debian; \ + cp -r debian $(DEBPACKAGEDIR); \ + git checkout master) + rm -f $(DEBUILDDIR)/$(LAPPNAME) + $(MAKE) -C $(DEBUILDDIR) $(LAPPNAME) update-copyright: - update-copyright --holder="Bastian Kleineidam" +# update-copyright is a local tool which updates the copyright year for each +# modified file. + update-copyright --holder="$(MAINTAINER)" -.PHONY: update-copyright deb test clean distclean count pyflakes -.PHONY: doccheck check releasecheck release dist chmod localbuild +changelog: +# github-changelog is a local tool which parses the changelog and automatically +# closes issues mentioned in the changelog entries. + github-changelog $(DRYRUN) $(GITUSER) $(GITREPO) doc/changelog.txt + +.PHONY: update-copyright deb test clean distclean count pyflakes changelog +.PHONY: doccheck check releasecheck release dist chmod localbuild sign register tag diff --git a/doc/Makefile b/doc/Makefile index ba144156f..d6bcffce9 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,14 +1,11 @@ -MANFILES:=dosage.1.html +all: dosage.1.html dosage.txt -all: man testresults.html - -man: $(MANFILES) +dosage.txt: dosage.1 +# make text file from man page for Windows builds + cols=`stty size | cut -d" " -f2`; stty cols 72; man -l $< | sed -e 's/.\cH//g' > $@; stty cols $$cols dosage.1.html: dosage.1 man2html -r $< | tail -n +2 | sed 's/Time:.*//g' | sed 's@/:@/@g' > $@ -# patch --no-backup-if-mismatch --quiet $@ dosage.1.html.diff + patch --no-backup-if-mismatch --quiet $@ dosage.1.html.diff -testresults.html: ../testresults.txt - ../scripts/mktestpage.py $< > $@ - -.PHONY: all man +.PHONY: all diff --git a/doc/dosage.1 b/doc/dosage.1 index cb20e023f..a2c061870 100644 --- a/doc/dosage.1 +++ b/doc/dosage.1 @@ -166,7 +166,7 @@ Jonathan Jacobs .br Tristan Seligmann .br -Bastian Kleineidam +Bastian Kleineidam .SH COPYRIGHT Copyright \(co 2004-2005 Tristan Seligmann and Jonathan Jacobs .br diff --git a/doc/dosage.1.html b/doc/dosage.1.html index e4f07f094..d0945a104 100644 --- a/doc/dosage.1.html +++ b/doc/dosage.1.html @@ -4,7 +4,7 @@

DOSAGE

Section: User Commands (1)
Index -Return to Main Contents
+Return to Main Contents
 

NAME

@@ -240,7 +240,7 @@ Jonathan Jacobs <korpse@slipgate.za.n Tristan Seligmann <mithrandi@slipgate.za.net>
-Bastian Kleineidam <calvin@users.sourceforge.net> +Bastian Kleineidam <bastian.kleineidam@web.de>  

COPYRIGHT

@@ -269,7 +269,7 @@ Copyright © 2012 Bastian Kleineidam
This document was created by -man2html, +man2html, using the manual pages.
diff --git a/doc/dosage.1.html.diff b/doc/dosage.1.html.diff new file mode 100644 index 000000000..ec9c99ffb --- /dev/null +++ b/doc/dosage.1.html.diff @@ -0,0 +1,22 @@ +diff --git i/doc/dosage.1.html w/doc/dosage.1.html +index e4f07f0..b8110eb 100644 +--- i/doc/dosage.1.html ++++ w/doc/dosage.1.html +@@ -4,7 +4,7 @@ + +

DOSAGE

+ Section: User Commands (1)
Index +-Return to Main Contents
++Return to Main Contents
+ +   +

NAME

+@@ -269,7 +269,7 @@ Copyright © 2012 Bastian Kleineidam + +
+ This document was created by +-man2html, ++man2html, + using the manual pages.
+ + diff --git a/doc/dosage.txt b/doc/dosage.txt new file mode 100644 index 000000000..5e368e601 --- /dev/null +++ b/doc/dosage.txt @@ -0,0 +1,160 @@ +DOSAGE(1) DOSAGE(1) + + + +NAME + dosage - a commandline webcomic downloader and archiver + +SYNOPSIS + dosage [options] module... + +DESCRIPTION + dosage is an application designed to keep a local mirror of + specific web comics and other picture-based content, such as + Picture Of The Day sites, with a variety of options for updat‐ + ing and maintaining collections. + +OPTIONS + -b PATH, --basepath=PATH + Specifies a base path to put comic subdirectories. The + default is Comics. + + --baseurl=PATH + Specifies the base URL for output events. The default is + a local file URI. + + -a, --all + Traverses all available strips backwards from the cur‐ + rent one. This can be useful you want a full collection + of a new comic strip, or update an existing one where + files are missing. Catchups can start at a specific + strip by using the index syntax, see the INDEX SYNTAX + and SPECIAL SYNTAX sections for more information. This + is useful when you missed some days and want only to + download the missing files. To make this task easy, the + traversal ends at the first existing image file when + starting from an index (excluding the index itself). + + -h, --help + Output brief help information. + + -l, --list + List available comic modules in multi-column fashion. + + --singlelist + List available comic modules in single-column fashion. + + -m MODULE, --modulehelp=MODULE + Output module-specific help for MODULE. + + -o OUTPUT, --output=OUTPUT + OUTPUT may be any one of the following: + + html - Writes out an HTML file linking to the strips + actually downloaded in the current run, named by date + (ala dailystrips). The files can be found in the html + directory of your Comics directory. + + rss - Writes out an RSS feed detailing what strips were + downloaded in the last 24 hours. The feed can be found + in Comics/dailydose.xml. + + rss - Writes an RSS feed with all of the strips down‐ + loaded during the run, for use with your favourite RSS + aggregator. + + -t, --timestamps + Print timestamps for all output at any level. + + -v, --verbose + Increase the output level by one with each occurence. + + -V, --version + Display the version number. module At least one valid + module must be specified. A list of valid modules can be + found by passing the -l option. Multiple module argu‐ + ments can be specified on the command line. Module + names are case insensitive, and it is sufficient to + specify a unique substring of the module name. + +INDEX SYNTAX + Instead of starting at the latest comic strip, an index lets + dosage start at a certain strip. The index can be specified by + appending a colon : and the index name after the module. Multi‐ + ple comma-spearated indices can also be specified. + + The index name itself usually is the part of the comic strip + URL that identifiess a strip, eg. a number or a date. The + expected format is documented when using the --modulehelp + option. + +SPECIAL SYNTAX + @ This expands to mean all the comics currently in your + Comics directory. All other specified comic module names + will be ignored. + + @@ This expands to mean all the comics available to Dosage. + + INDEX SYNTAX can not be used with SPECIAL SYNTAX. + +EXAMPLES + Retrieve all Mega Tokyo comics: + dosage -a megatokyo + + Retrieve the current comic of Cyanide and Happiness: + dosage cyanideandhappiness + + Retrieve the current strip of all comics in your Comics direc‐ + tory: + dosage @ + + Retrieve the current strip of every comic that there is a mod‐ + ule for: + dosage @@ + + Retrieve the Penny Arcade strip for a given index: + dosage pennyarcade:2004-07-22 + Retrieve Calvin and Hobbes strips from a given index going + backwards to the beginning until an existing file is found: + dosage -c calvinandhobbes:20120722 + +ENVIRONMENT + HTTP_PROXY + mainline will use the specified HTTP proxy when down‐ + loading URL contents. + +NOTES + Should retrieval fail on any given strip mainline will attempt + to retry. However the retry information is only outputted in + the second and successive output levels. + + At the time of writing, a complete Dosage collection weighs in + at around 3.0GB. + +RETURN VALUE + The return value greater than zero when + + · a program error occurred. + + · comics could not be found or downloaded + + · the program run was aborted with Ctrl-C + + Else the return value is zero. + +BUGS + Users can report or view bugs, patches or feature suggestions + at https://github.com/wummel/dosage/issues + +AUTHORS + Jonathan Jacobs + Tristan Seligmann + Bastian Kleineidam + +COPYRIGHT + Copyright © 2004-2005 Tristan Seligmann and Jonathan Jacobs + Copyright © 2012 Bastian Kleineidam + + + + DOSAGE(1) diff --git a/doc/testresults.html b/doc/testresults.html index 5638d9f02..84764a01a 100644 --- a/doc/testresults.html +++ b/doc/testresults.html @@ -12,10 +12,12 @@ -

Dosage test results from 13.12.2012

+

Dosage test results from 14.12.2012

+

Note that it is almost impossible to get a 100% OK test run +due to temporary site failures.

- + @@ -26,23 +28,22 @@ - - + - + - + @@ -66,7 +67,6 @@ - @@ -84,13 +84,13 @@ - -
CloneManga/Kanami OK
-
CloneManga/MomokaCorner OK
- - -
CloneManga/PennyTribute OK
-
CloneManga/Tomoyo42sRoom OK
+ + + + + + + @@ -100,7 +100,7 @@ - + @@ -159,11 +159,10 @@ - + - @@ -209,7 +208,7 @@ - + @@ -278,7 +277,7 @@ - + @@ -295,7 +294,7 @@ - + @@ -345,7 +344,7 @@ - + @@ -362,12 +361,12 @@ - + - + @@ -376,7 +375,7 @@ - + @@ -412,7 +411,7 @@ - + @@ -437,13 +436,13 @@ - + - + @@ -462,9 +461,9 @@ - + - + @@ -522,7 +521,7 @@ - + @@ -586,7 +585,7 @@ - + @@ -617,7 +616,7 @@ - + @@ -625,7 +624,7 @@ - + @@ -636,7 +635,7 @@ - + @@ -667,7 +666,7 @@ - + @@ -691,7 +690,7 @@ - + @@ -714,7 +713,7 @@ - + @@ -775,7 +774,7 @@ - + @@ -800,7 +799,7 @@ - + @@ -814,7 +813,7 @@ - + @@ -822,7 +821,7 @@ - + @@ -846,7 +845,7 @@ - + @@ -887,7 +886,7 @@ - + @@ -932,7 +931,7 @@ - + @@ -962,12 +961,12 @@ - + - + @@ -1020,10 +1019,10 @@ - + - + @@ -1077,14 +1076,14 @@ - + - + @@ -1102,7 +1101,7 @@ - + @@ -1184,7 +1183,7 @@ - + @@ -1203,7 +1202,7 @@ - + @@ -1240,7 +1239,7 @@ - + @@ -1275,10 +1274,10 @@ - + - + @@ -1294,7 +1293,7 @@ - + @@ -1308,7 +1307,7 @@ - + @@ -1344,7 +1343,7 @@ - + @@ -1355,13 +1354,13 @@ - + - + @@ -1390,7 +1389,7 @@
]*[^>]*><\\s*[iI][mM][gG]\\s+(?:[^>]*\\s+)?[cC][lL][aA][sS][sS]\\s*=\\s*"arrow_last"[^>]*[^>]*>' in http://www.drunkduck.com/what_comes_first/" class="failed">DrunkDuck/ What_comes_first FAILED
- + @@ -1429,8 +1428,7 @@ - - + @@ -1462,538 +1460,538 @@ - - - - +
GoComics/2CowsandaChicken OK
+ + + - + - - + + - - + + - + - - + + - + - - - + + + - + - - + + - - - - - - + + + + + + - - - - - + + + + + - + - + - - + + - - - - + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - + + + - - - + + + - - + + - - - - - - + + + + +
GoComics/ CheapThrillsCuisine OK
+ - - - + + + - - + + - - - + + + - - - - + + + + - - + + - + - - - + + + - - - - - - + + + + + + - - - + + + - + - - + + - - + + - + - - - + + + - + - - + + - + - - - - + + + + - - - - + + + + - - + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - + - - - - - + + + + + - - + + - + - + - + - - - + + + - - - + + + - - + + - + - + - - + + - - - - - + + + + + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - + + + - - - - + + + + - - - + + + - - + + - + - - + + - + - - - - + + + + - + - - - - - - - + + + + + + + - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - + + + + - - - - + + + + - - - + + + - - + + - + - + - - + + - - - - - + + + + + - + - - - + + + - - + + - - + + - - + + - - - + + + - + - + - + - + - - + + - - - + + + - - + + - - - - - - - + + + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - + + - + - - - + + + - - - - + + + + - + - - + + - - - + + + - + - + - + - + - - + + - + - - - - - + + + + + - + - - + + - + @@ -2017,9 +2015,9 @@ - + @@ -2032,16 +2030,15 @@ - - + - + @@ -2056,14 +2053,14 @@ - + - + @@ -2080,7 +2077,7 @@ - + @@ -2103,7 +2100,7 @@ - + @@ -2128,7 +2125,7 @@ -
SmackJeeves/ AbbimaysRandomness OK
+ @@ -2136,26 +2133,26 @@ - + - - + + - + - + - - + + @@ -2166,16 +2163,16 @@ - + - + - + @@ -2187,21 +2184,21 @@ - - + + - + - + - + @@ -2210,9 +2207,9 @@ -
SmackJeeves/ CheneysGotaGun OK
- -
SmackJeeves/ ChickenScratches OK
+ + + @@ -2222,14 +2219,14 @@ - + -
SmackJeeves/Contradiction OK
- - - + + + + @@ -2238,70 +2235,70 @@ - + -
SmackJeeves/ DarkusNewShowcase OK
- + + - + -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/ DepthsOfMyEmptySoul FAILED
- + + - + - - + + - - + + - + - -
SmackJeeves/EonsAgo OK
-
SmackJeeves/ EscuelaYamanaoki OK
+ + + - + - + - - -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/FinalArcanum FAILED
- - + + + + + - + - + - + - + @@ -2322,7 +2319,7 @@ -
SmackJeeves/ GuardiansoftheGalaxialSpaceways OK
+ @@ -2334,15 +2331,15 @@ - + - - + + - + -
SmackJeeves/Holon OK
+ @@ -2353,16 +2350,16 @@ - + - -
SmackJeeves/ InspiredByADream OK
+ + - + @@ -2370,16 +2367,16 @@ - + - + - + @@ -2389,37 +2386,37 @@ - - - + + + - + - + - + - + - - + + - + @@ -2428,47 +2425,47 @@ -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/MUTE FAILED
+ -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/ MagicalGirlAlice FAILED
+ - + - + - + - + -
SmackJeeves/ MegaManBattleNetwork7TheWorldTournament OK
+ - + - + - - - + + + - + @@ -2476,10 +2473,10 @@ -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/MylifewithFel FAILED
+
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[pP][rR][eE][vV]|]+(?:button_previous|naviButtons_Previous|nav_prev4|prev|previous|webbuttonback|PrevArrow)\\.|[^<]*[bB][aA][cC][kK]|\\s*<SmackJeeves/MylifewithFel FAILED
- + @@ -2487,32 +2484,32 @@ -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/ NormalIsBoring FAILED
+
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[pP][rR][eE][vV]|]+(?:button_previous|naviButtons_Previous|nav_prev4|prev|previous|webbuttonback|PrevArrow)\\.|[^<]*[bB][aA][cC][kK]|\\s*<SmackJeeves/ NormalIsBoring FAILED
- - + + - + - + -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/ OverlordofRavenfell FAILED
+ - + @@ -2521,12 +2518,12 @@ - + - + @@ -2544,52 +2541,52 @@ - + - + - + -
SmackJeeves/RoyalIcing OK
+ - - + + - + - + -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/ Saywhatyoumean FAILED
+
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[pP][rR][eE][vV]|]+(?:button_previous|naviButtons_Previous|nav_prev4|prev|previous|webbuttonback|PrevArrow)\\.|[^<]*[bB][aA][cC][kK]|\\s*<SmackJeeves/ Saywhatyoumean FAILED
-
SmackJeeves/ SecondGeneration OK
+ - - + + - + - - -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/SimplePixel FAILED
+ + +
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[pP][rR][eE][vV]|]+(?:button_previous|naviButtons_Previous|nav_prev4|prev|previous|webbuttonback|PrevArrow)\\.|[^<]*[bB][aA][cC][kK]|\\s*<SmackJeeves/SimplePixel FAILED
@@ -2604,30 +2601,30 @@ - + - + - + - + - + -
SmackJeeves/ SubjecttoChangeCollegeWoes OK
+ -
SmackJeeves/ SupermassiveBlackHoleA OK
+ @@ -2635,7 +2632,7 @@ - + @@ -2651,21 +2648,21 @@ - + -
SmackJeeves/ TheDemonicAdventuresofAngelWitchPita OK
+ - + - + - + @@ -2674,15 +2671,15 @@ - + -
SmackJeeves/ ThePeopleThatMeltinTheRain OK
- - + + + @@ -2693,24 +2690,24 @@ - + - - + + -
SmackJeeves/ToD OK
+ - - + + @@ -2720,8 +2717,8 @@ - - + + @@ -2738,11 +2735,11 @@ -
"]*/comics/\\d+/[^>"]*)"?[^>]*[^>]*>(?:]+alt="[^"]*[Pp]rev|]+(?:button_previous|nav_prev4)\\.|[^<]*[Bb]ack|\\s*<SmackJeeves/ XTINTheDragonsDreamworld FAILED
+ - - + + @@ -2765,8 +2762,6 @@ - - @@ -2777,11 +2772,10 @@ - + - @@ -2789,7 +2783,6 @@ -
UserFriendly FAILED
@@ -2815,16 +2808,15 @@ - - + - +
- - - -

Dosage test results from %(date)s

-

Note that it is almost impossible to get a 100% OK test run -due to temporary network failures or sites that are just updating -the comic page.

-
+--- +extends: base.j2 +default_block: content +title: Dosage by Bastian Kleineidam +description: a commandline webcomic downloader and archiver +--- + +
+
+ +

Dosage test results from %(date)s

+

Note that it is almost impossible to get a 100%% OK test run +due to temporary site failures.

+
%(content)s
- - """ def get_mtime (filename): """Return modification time of filename.""" - return os.stat(filename)[stat.ST_MTIME] + return os.path.getmtime(filename) def strdate(t): diff --git a/setup.py b/setup.py index 9accb6b4c..bc4ee56b0 100644 --- a/setup.py +++ b/setup.py @@ -20,6 +20,7 @@ except ImportError: has_py2exe = False from distutils.core import setup, Distribution from distutils.command.install_lib import install_lib +from distutils.command.register import register from distutils import util from distutils.file_util import write_file @@ -339,6 +340,16 @@ except ImportError: pass +class MyRegister (register, object): + """Custom register command.""" + + def build_post_data(self, action): + """Force application name to lower case.""" + data = super(MyRegister, self).build_post_data(action) + data['name'] = data['name'].lower() + return data + + args = dict( name = AppName, version = AppVersion, @@ -361,6 +372,7 @@ args = dict( cmdclass = { 'install_lib': MyInstallLib, 'py2exe': MyPy2exe, + 'register': MyRegister, }, options = { "py2exe": py2exe_options,