uscan - scan upstream sources for new releases of software
The traditional debian/watch files can still be used, but the current format offers both simpler and more flexible services. We do not describe the old format here; for their documentation, see the source code for uscan.
The following demonstrates the type of entries which can appear in a debian/watch file. Obviously, not all of these would appear in one such file; usually, one would have one line for the current package.
# format version number, currently 3; this line is compulsory! version=3 # Line continuations are performed with \ # This the format for an FTP site: # Full-site-with-pattern [Version [Action]] ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-(.*)\.tar\.gz \ debian uupdate # This is the format for an FTP site with regex special characters in # the filename part ftp://ftp.worldforge.org/pub/worldforge/libs/Atlas-C++/transitional/Atlas-C\+\+-(.*)\.tar\.gz # This is the format for an FTP site with directory pattern matching ftp://ftp.nessus.org/pub/nessus/nessus-([\d\.]+)/src/nessus-core-([\d\.]+)\.tar\.gz # This can be used if you want to override the PASV setting # for a specific site # opts=pasv ftp://.../... # This is one format for an HTTP site, which is the same # as the FTP format. uscan starts by downloading the homepage, # obtained by removing the last component of the URL; in this case, # http://www.cpan.org/modules/by-module/Text/ http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-(.*)\.tar\.gz # This is a variant HTTP format which allows direct specification of # the homepage: # Homepage Pattern [Version [Action]] http://www.dataway.ch/~lukasl/amph/amph.html \ files/amphetamine-([\d\.]*).tar.bz2 # This one shows that recursive directory scanning works, in either of # two forms, as long as the website can handle requests of the form # http://site/inter/mediate/dir/ http://tmrc.mit.edu/mirror/twisted/Twisted/(.)/ \ Twisted-([.]*).tar.bz2 http://tmrc.mit.edu/mirror/twisted/Twisted/(.)/Twisted-([.]*).tar.bz2 # If your package is located on sourceforge, use one of the following # formats to automatically use the qa.debian.org redirector, avoiding # SF's difficult mirror system. http://sf.net/audacity/audacity-src-(.+)\.tar\.gz http://sf.net/audacity/ audacity-src-(.+)\.tar\.gz # This is the format for a site which has funny version numbers; # the parenthesised groups will be joined with dots to make a # sanitised version number http://www.site.com/pub/foobar/foobar_v(\d+)_(\d+)\.tar\.gz # This is another way of handling site with funny version numbers, # this time using mangling. (Note that multiple groups will be # concatenated before mangling is performed, and that mangling will # only be performed on the basename version number, not any path # version numbers.) opts="uversionmangle=s/^/0.0./" \ ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/development/Wine-(.*)\.tar\.gz # Similarly, the upstream part of the Debian version number can be # mangled: opts=dversionmangle=s/\.dfsg\.\d+$// \ http://some.site.org/some/path/foobar-(.*)\.tar\.gz # The filename is found by taking the last component of the URL and # removing everything after any '?'. If this would not make a usable # filename, use filenamemangle. For example, # <A href="http://foo.bar.org/download/?path=&download=foo-0.1.1.tar.gz"> # could be handled as: # opts=filenamemangle=s/.*=(.*)/$1/ \ # http://foo.bar.org/download/\?path=&download=foo-(.*)\.tar\.gz # # <A href="http://foo.bar.org/download/?path=&download_version=0.1.1"> # could be handled as: # opts=filenamemangle=s/.*=(.*)/foo-$1\.tar\.gz/ \ # http://foo.bar.org/download/\?path=&download_version=(.*) # The option downloadurlmangle can be used to mangle the URL of the file # to download. This can only be used with http:// URLs. This may be # necessary if the link given on the webpage needs to be transformed in # some way into one which will work automatically, for example: # opts=downloadurlmangle=s/prdownload/download/ \ # http://developer.berlios.de/project/showfiles.php?group_id=2051 \ # http://prdownload.berlios.de/softdevice/vdr-softdevice-(.*).tgz
Comment lines may be introduced with a `#' character. Continuation lines may be indicated by terminating a line with a backslash character.
The first (non-comment) line of the file must begin `version=3'. This allows for future extensions without having to change the name of the file.
There are two possibilities for the syntax of an HTTP watchfile line, and only one for an FTP line. We begin with the common (and simpler) format. We describe the optional opts=... first field below, and ignore it in what follows.
The first field gives the full pattern of URLs being searched for. In the case of an FTP site, the directory listing for the requested directory will be requested and this will be scanned for files matching the basename (everything after the trailing `/'). In the case of an HTTP site, the URL obtained by stripping everything after the trailing slash will be downloaded and searched for hrefs (links of the form <a href=...>) to either the full URL pattern given, or to the absolute part (everything without the http://host.name/ part), or to the basename (just the part after the final `/'). Everything up to the final slash is taken as a verbatim URL, as long as there are no parentheses (`(' and ')') in this part of the URL: if it does, the directory name will be matched in the same way as the final component of the URL as described below. (Note that regex metacharacters such as `+' are regarded literally unless they are in a path component containing parentheses; see the Atlas-C++ example above. Also, the parentheses must match within each path component.)
The pattern (after the final slash) is a Perl regexp (see perlre(1) for details of these). You need to make the pattern so tight that it matches only the upstream software you are interested in and nothing else. Also, the pattern will be anchored at the beginning and at the end, so it must match the full filename. (Note that for HTTP URLs, the href may include the absolute path or full site and path and still be accepted.) The pattern must contain at least one Perl group as explained in the next paragraph.
Having got a list of `files' matching the pattern, their version numbers are extracted by treating the part matching the Perl regexp groups, demarcated by `(...)', joining them with `.' as a separator, and using the result as the version number of the file. The version number will then be mangled if required by the uversionmangle option described below. Finally, the file versions are then compared to find the one with the greatest version number, as determined by dpkg --compare-versions. Note that if you need Perl groups which are not to be used in the version number, either use `(?:...)' or use the uversionmangle option to clean up the mess!
The current (upstream) version can be specified as the second parameter in the watchfile line. If this is debian or absent, then the current Debian version (as determined by debian/changelog) is used to determine the current upstream version. The current upstream version may also be specified by the command-line option --upstream-version, which specifies the upstream version number of the currently installed package (i.e., the Debian version number without epoch and Debian revision). The upstream version number will then be mangled using the dversionmangle option if one is specified, as described below. If the newest version available is newer than the current version, then it is downloaded into the parent directory, unless the --report or --report-status option has been used. Once the file has been downloaded, then a symlink to the file is made from <package>_<version>.orig.tar.gz if the file has a .tar.gz or a .tgz suffix and from <package>_<version>.orig.tar.bz2 if the file has a .tar.bz2 or a .tbz or .tbz2 suffix.
Finally, if a third parameter (an action) is given in the watchfile line, this is taken as the name of a command, and the command
command --upstream-version version filenameis executed, using either the original file or the symlink name. A common such command would be uupdate(1). (Note that the calling syntax was slightly different when using watchfiles without a `version=...' line; there the command executed was `command filename version'.) If the command is uupdate, then the --no-symlink option is given to uupdate as a first option, since any requested symlinking will already be done by uscan.
The alternative version of the watchfile syntax for HTTP URLs is as follows. The first field is a homepage which should be downloaded and then searched for hrefs matching the pattern given in the second field. (Again, this pattern will be anchored at the beginning and the end, so it must match the whole href. If you want to match just the basename of the href, you can use a pattern like ".*/name-(.*)\.tar\.gz" if you know that there is a full URL, or better still: "(?:.*/)?name-(.*)\.tar\.gz" if there may or may not be. Note the use of (?:...) to avoid making a backreference.) If any of the hrefs in the homepage which match the (anchored) pattern are relative URLs, they will be taken as being relative to the base URL of the homepage (i.e., with everything after the trailing slash removed), or relative to the base URL specified in the homepage itself with a <base href="..."> tag. The third and fourth fields are the version number and action fields as before.
$version =~ rule;for each rule. Thus, suitable rules might be `s/^/0./' to prepend `0.' to the version number and `s/_/./' to change underscores into periods. Note that the rules string may not contain commas; this should not be a problem.
DEVSCRIPTS_CHECK_DIRNAME_LEVEL can take the following values:
The directory name is checked by testing whether the current directory name (as determined by pwd(1)) matches the regex given by the configuration file option DEVSCRIPTS_CHECK_DIRNAME_REGEX or by the command line option --check-dirname-regex regex. Here regex is a Perl regex (see perlre(3perl)), which will be anchored at the beginning and the end. If regex contains a '/', then it must match the full directory path. If not, then it must match the full directory name. If regex contains the string 'PACKAGE', this will be replaced by the source package name, as determined from the changelog. The default value for the regex is: 'PACKAGE(-.*)?', thus matching directory names such as PACKAGE and PACKAGE-version.
#!/bin/sh -e # called with '--upstream-version' <version> <file> uupdate "$@" package=`dpkg-parsechangelog | sed -n 's/^Source: //p'` cd ../$package-$2 debuild
Note that we don't call dupload or dput automatically, as the maintainer should perform sanity checks on the software before uploading it to Debian.
If you are upgrading from version 2, the key incompatibility is if you have multiple groups in the pattern part; whereas only the first one would be used in version 2, they will all be used in version 3. To avoid this behaviour, change the non-version-number groups to be (?:...) instead of a plain (...) group.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |