Provided by: devscripts_2.14.1ubuntu0.1_amd64 bug

NAME

       uscan - scan/watch upstream sources for new releases of software

SYNOPSIS

       uscan [options] [path-to-debian-source-packages ...]

DESCRIPTION

       uscan  scans  the  given  directories  (or  the current directory if none are specified) and all of their
       subdirectories for packages containing a control file debian/watch.  Parameters are then read from  those
       control  files and upstream ftp or http sites are inspected for newly available updates (as compared with
       the upstream version number retrieved from the debian/changelog file in the same directory).  The  newest
       updates  are  retrieved  (as  determined  by their version numbers) and if specified in the watch file, a
       program may then be executed on the newly downloaded source.

       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.

FORMAT of debian/watch files

       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 is 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/(\d\.\d)/ \
         Twisted-([\d\.]*)\.tar\.bz2
       http://tmrc.mit.edu/mirror/twisted/Twisted/(\d\.\d)/Twisted-([\d\.]*)\.tar\.bz2

       # For maximum flexibility with upstream tarball formats, use this:
       http://example.com/example-(\d[\d.]*)\.(?:zip|tgz|tbz2|txz|tar\.(?:gz|bz2|xz))

       # qa.debian.org runs a redirector which allows a simpler form of URL
       # for SourceForge based projects. The format below will automatically
       # be rewritten to use the redirector.
       http://sf.net/audacity/audacity-src-(.+)\.tar\.gz

       # For GitHub projects you can use the tags or releases page.  Since the archive
       # URLs use only the version as the name, it is recommended to use a
       # filenamemangle to adjust the name of the downloaded file:
       opts="filenamemangle=s/(?:.*)?v?(\d[\d\.]*)\.tar\.gz/<project>-$1.tar.gz/" \
         https://github.com/<user>/<project>/tags (?:.*/)?v?(\d[\d\.]*)\.tar\.gz

       # For Google Code projects you should use the downloads page like this:
       http://code.google.com/p/<project>/downloads/list?can=1 \
         .*/<project>-(\d[\d.]*)\.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 web page 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 watch file 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 watch file 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|bz2|lzma|xz} as
       described by the help for the --symlink option.

       Finally, if a third parameter (an action) is given in the watch file line, this is taken as the name of a
       command, and the command
           command --upstream-version version filename
       is 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 watch file 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 watch file 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.

PER-SITE OPTIONS

       A  watch  file  line  may  be  prefixed  with  `opts=options', where options is a comma-separated list of
       options.  The whole options string may be enclosed in  double  quotes,  which  is  necessary  if  options
       contains any spaces.  The recognised options are as follows:

       active and passive (or pasv)
              If  used  on  an FTP line, these override the choice of whether to use PASV mode or not, and force
              the use of the specified mode for this site.

       uversionmangle=rules
              This is used to mangle the upstream version number as matched by the ftp://... or http:// rules as
              follows.  First, the rules string is split into multiple rules at every `;'.   Then  the  upstream
              version  number is mangled by applying rule to the version, in a similar way to executing the Perl
              command:
                  $version =~ rule;
              for each rule.  Thus, suitable rules might be `s/^/0./' to prepend `0.' to the version number  and
              `s/_/./g'  to  change underscores into periods.  Note that the rule string may not contain commas;
              this should not be a problem.

              rule may only use the 's', 'tr' and 'y' operations.  When the 's' operation is used, only the 'g',
              'i' and 'x' flags are available and rule may not contain any expressions which have the  potential
              to execute code (i.e. the (?{}) and (??{}) constructs are not supported).

              If  the  's'  operation  is used, the replacement can contain backreferences to expressions within
              parenthesis in the matching regexp, like `s/-alpha(\d*)/.a$1/'. These backreferences must use  the
              `$1' syntax, as the `\1' syntax is not supported.

       dversionmangle=rules
              This  is  used  to mangle the Debian version number of the currently installed package in the same
              way as the uversionmangle option.  Thus, a suitable rule might be `s/\.dfsg\.\d+$//' to  remove  a
              `.dfsg.1'  suffix  from  the  Debian  version  number,  or to handle `.pre6' type version numbers.
              Again, the rules string may not contain commas; this should not be a problem.

       versionmangle=rules
              This is a syntactic shorthand for  uversionmangle=rules,dversionmangle=rules,  applying  the  same
              rules to both the upstream and Debian version numbers.

       filenamemangle=rules
              This is used to mangle the filename with which the downloaded file will be saved, and is parsed in
              the  same way as the uversionmangle option.  Examples of its use are given in the examples section
              above.

       downloadurlmangle=rules
              This is used to mangle the URL to be used for the download.  The URL is first  computed  based  on
              the  homepage  downloaded and the pattern matched, then the version number is determined from this
              URL.  Finally, any rules given by this option are applied before the actual  download  attempt  is
              made. An example of its use is given in the examples section above.

       pgpsigurlmangle=rules
              If  present, the supplied rules will be applied to the downloaded URL (after any downloadurlmangle
              rules, if present) to craft a new URL that will be used to fetch the  detached  OpenPGP  signature
              file  for  the  upstream  tarball.   Some  common  rules  might  be  `s/$/.asc/' or `s/$/.pgp/' or
              `s/$/.gpg/'.  This signature must be made by a key found in the  keyring  debian/upstream/signing-
              key.pgp  or  the armored keyring debian/upstream/signing-key.asc.  If it is not valid, or not made
              by one of the listed keys, uscan will report an error.

Directory name checking

       Similarly to several other scripts in the devscripts package,  uscan  explores  the  requested  directory
       trees  looking  for  debian/changelog and debian/watch files.  As a safeguard against stray files causing
       potential problems, and in order to promote efficiency, it will examine the name of the parent  directory
       once  it  finds  the  debian/changelog file, and check that the directory name corresponds to the package
       name.  It will only attempt to download newer versions of the package  and  then  perform  any  requested
       action  if  the directory name matches the package name.  Precisely how it does this is controlled by two
       configuration file variables DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and their
       corresponding command-line options --check-dirname-level and --check-dirname-regex.

       DEVSCRIPTS_CHECK_DIRNAME_LEVEL can take the following values:

       0      Never check the directory name.

       1      Only  check  the  directory  name  if  we  have  had  to  change  directory  in  our  search   for
              debian/changelog,  that  is,  the  directory containing debian/changelog is not the directory from
              which uscan was invoked.  This is the default behaviour.

       2      Always check the directory name.

       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.

EXAMPLE

       This script will perform a fully automatic upstream update.

       #!/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.

OPTIONS

       --report, --no-download
              Only report about available newer versions but do not download anything.

       --report-status
              Report  on  the  status  of  all  packages,  even  those which are up-to-date, but do not download
              anything.

       --download
              Report and download.  (This is the default behaviour.)

       --destdir
              Path of directory to which to download.  If the  specified  path  is  not  absolute,  it  will  be
              relative  to  one  of  the  current  directory or, if directory scanning is enabled, the package's
              source directory.

       --force-download
              Download upstream even if up to date (will not overwrite local files, however)

       --pasv Force PASV mode for FTP connections.

       --no-pasv
              Do not use PASV mode for FTP connections.

       --timeout N
              Set timeout to N seconds (default 20 seconds).

       --symlink
              Make orig.tar.gz symlinks to any downloaded files if their extensions are .tar.gz or  .tgz.   This
              is  also  handled  for  orig.tar.bz2  (for upstream .tar.bz2, .tbz, and .tbz2), orig.tar.lzma (for
              upstream .tar.lzma, .tlz, .tlzm, and .tlzma), and orig.tar.xz (for  upstream  .tar.xz  and  .txz).
              (This is the default behaviour.)

       --rename
              Instead  of  symlinking,  rename  the  downloaded files to their Debian orig.tar.gz, orig.tar.bz2,
              orig.tar.lzma, or orig.tar.xz names as described above.

       --repack
              After having downloaded an lzma tar, xz tar, bzip tar or zip archive, repack  it  to  a  gzip  tar
              archive, which is still currently required as a member of a Debian source package. Does nothing if
              the  downloaded  archive  is  not  an  lzma tar archive, xz tar archive, bzip tar archive or a zip
              archive (i.e. it doesn't match a .tlz, .tlzm,  .tlzma,  .tar.lzma,  .txz,  .tar.xz,  .tbz,  .tbz2,
              .tar.bz2 or .zip extension). The unzip package must be installed in order to repack .zip archives,
              the xz-utils package must be installed to repack lzma or xz tar archives.

       --no-symlink
              Don't make these symlinks and don't rename the files.

       --dehs Use an XML format for output, as required by the DEHS system.

       --no-dehs
              Use the traditional uscan output format.  (This is the default behaviour.)

       --package package
              Specify the name of the package to check for rather than examining debian/changelog; this requires
              the  --upstream-version  (unless a version is specified in the watch file) and --watchfile options
              as well.  Furthermore, no directory scanning will be done and nothing will  be  downloaded.   This
              option is probably most useful in conjunction with the DEHS system (and --dehs).

       --upstream-version upstream-version
              Specify  the current upstream version rather than examine the watch file or changelog to determine
              it.  This is ignored if a directory scan is being performed and more than one watch file is found.

       --watchfile watchfile
              Specify the watchfile rather than perform a directory scan to determine it.   If  this  option  is
              used  without  --package, then uscan must be called from within the Debian package source tree (so
              that debian/changelog can be found simply by stepping up through the tree).

       --download-version version
              Specify the version which the upstream release must match in order to be considered,  rather  than
              using the release with the highest version.

       --download-current-version
              Download the currently packaged version

       --verbose
              Give verbose output.

       --no-verbose
              Don't give verbose output.  (This is the default behaviour.)

       --no-exclusion
              Do not automatically exclude files mentioned in debian/copyright field Files-Excluded

       --debug
              Dump the downloaded web pages to stdout for debugging your watch file.

       --check-dirname-level N
              See the above section Directory name checking for an explanation of this option.

       --check-dirname-regex regex
              See the above section Directory name checking for an explanation of this option.

       --user-agent, --useragent
              Override the default user agent header.

       --no-conf, --noconf
              Do  not  read  any  configuration  files.   This can only be used as the first option given on the
              command-line.

       --help Give brief usage information.

       --version
              Display version information.

CONFIGURATION VARIABLES

       The two configuration files /etc/devscripts.conf and ~/.devscripts are sourced by a shell in  that  order
       to  set  configuration variables.  These may be overridden by command line options.  Environment variable
       settings are ignored for this purpose.  If the first command line option given is  --noconf,  then  these
       files will not be read.  The currently recognised variables are:

       USCAN_DOWNLOAD
              If  this is set to no, then newer upstream files will not be downloaded; this is equivalent to the
              --report or --no-download options.

       USCAN_PASV
              If this is set to yes or no, this will  force  FTP  connections  to  use  PASV  mode  or  not  to,
              respectively.   If  this  is set to default, then Net::FTP(3) makes the choice (primarily based on
              the FTP_PASSIVE environment variable).

       USCAN_TIMEOUT
              If set to a number N, then set the timeout to N seconds.  This  is  equivalent  to  the  --timeout
              option.

       USCAN_SYMLINK
              If  this  is  set  to  no,  then  a pkg_version.orig.tar.{gz|bz2|lzma|xz} symlink will not be made
              (equivalent to the --no-symlink option).  If it is set to yes or symlink, then the  symlinks  will
              be made.  If it is set to rename, then the files are renamed (equivalent to the --rename option).

       USCAN_DEHS_OUTPUT
              If  this  is  set  to  yes, then DEHS-style output will be used.  This is equivalent to the --dehs
              option.

       USCAN_VERBOSE
              If this is set to yes, then verbose output will be given.  This is  equivalent  to  the  --verbose
              option.

       USCAN_USER_AGENT
              If  set, the specified user agent string will be used in place of the default.  This is equivalent
              to the --user-agent option.

       USCAN_DESTDIR
              If set, the downloaded files will be  placed  in  this  directory.   This  is  equivalent  to  the
              --destdir option.

       USCAN_REPACK
              If  this is set to yes, then after having downloaded a bzip tar, lzma tar, xz tar, or zip archive,
              uscan will repack it to a gzip tar.  This is equivalent to the --repack option.

       USCAN_EXCLUSION
              If this is set to no, files mentioned in the field  Files-Excluded  of  debian/copyright  will  be
              ignored and no exclusion of files will be tried.  This is equivalent to the --no-exclusion option.

EXIT STATUS

       The exit status gives some indication of whether a newer version was found or not; one is advised to read
       the output to determine exactly what happened and whether there were any warnings to be noted.

       0      Either  --help  or --version was used, or for some watch file which was examined, a newer upstream
              version was located.

       1      No newer upstream versions were located for any of the watch files examined.

HISTORY AND UPGRADING

       This section briefly describes the backwards-incompatible watch file features which have  been  added  in
       each watch file version, and the first version of the devscripts package which understood them.

       Pre-version 2
              The  watch  file  syntax  was  significantly  different  in those days.  Don't use it.  If you are
              upgrading from a pre-version 2 watch file, you are advised to read this manpage and to start  from
              scratch.

       Version 2
              devscripts version 2.6.90: The first incarnation of the current style of watch files.

       Version 3
              devscripts  version 2.8.12: Introduced the following: correct handling of regex special characters
              in the path part, directory/path pattern matching, version number in several parts, version number
              mangling.  Later versions have also introduced URL mangling.

              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.

SEE ALSO

       dpkg(1), perlre(1), uupdate(1), devscripts.conf(5)

AUTHOR

       The  original  version  of  uscan  was  written  by Christoph Lameter <clameter@debian.org>.  Significant
       improvements, changes and bugfixes were made by Julian Gilbey <jdg@debian.org>.  HTTP support  was  added
       by Piotr Roszatycki <dexter@debian.org>.  The program was rewritten in Perl by Julian Gilbey.

DEBIAN                                          Debian Utilities                                        USCAN(1)