1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-11-09 22:36:14 +01:00

fix whitespace

This commit is contained in:
Pavol Rusnak 2010-02-28 02:30:13 +01:00
parent 22b684fa38
commit 8d551e0a69
13 changed files with 149 additions and 148 deletions

44
NEWS
View File

@ -63,7 +63,7 @@
- search: allow to limit results via existing attibutes
- added "osc meta attribute" for basic attribute creation, deletion, showing and value setting
- implement "osc mbranch" call to create projects with multiple source package (instances)
- new "osc patchinfo" command: basic patchinfo generation and modification support
- new "osc patchinfo" command: basic patchinfo generation and modification support
- add support for _patchinfo package submissions in "osc sr" on project level
- support review handling of requests (new "osc review accept/decline $REQUEST_ID" command
@ -98,7 +98,7 @@
- rename old "platform/s" names to "repository/ies" (internal cleanup only)
- fixed osc diff -c N, it failed with int and string concatenation
- made osc diff and rdiff more similar: added -p, -c to rdiff, removed -u from rdiff.
made -u default for both, renamed --pretty to --plain as it is the opposite of -u
made -u default for both, renamed --pretty to --plain as it is the opposite of -u
#
# Features which require OBS 1.7
#
@ -167,7 +167,7 @@
0.119:
- Support new request types
- "submitreq" command has a new syntax (incompatible !)
- new "deleterequest" command
- new "deleterequest" command
- new "changedevelrequest" command
- new "request" command for showing/modifing requests
- Multiple actions in one request is not yet supported by osc
@ -231,7 +231,7 @@
- fixed support for accessing download repositories (worked only for download.o.o so far)
0.114:
- the .oscrc config handling has been cleaned up:
- the .oscrc config handling has been cleaned up:
* use "apiurl" for everything now (== <protocol>://<host>)
* added aliases support for [apiurl] sections in the ~/.oscrc.
Example:
@ -243,14 +243,14 @@
* when writing a new ~/.oscrc, store the apiurl in the conffile (bnc#478054)
* fixed bug that made osc ask for credentials when -A was used (bnc#478054)
* fixed crash upon password entry (first startup) (bnc#478052)
- osc build:
- osc build:
* make product builds work
* speed up by using a cookie when fetching the binaries (bnc#477690)
* support for VM (kvm or xen) builds
* obsolete the need to configure download server, get it from the build
service instance instead.
* be a bit more verbose if the linked package isn't expanded (bnc#470948)
- osc branch:
- osc branch:
* --develproject option fixed (the API calls it 'ignoredevel' instead of 'nodevelproject')
* --revision option added
- osc jobhistory: new command to see build job history of a project or a package
@ -277,14 +277,14 @@
- don't use a hardcoded path for the rpm binary otherwise it fails on
distributions like debian
- osc meta: be more verbose in case of failure (bnc#459292)
- osc mkpac: add info how to enable the package tracking feature (bnc#459288)
- osc mkpac: add info how to enable the package tracking feature (bnc#459288)
0.112:
important bugfix:
- osc deletepac: prevent recursive deletion of a whole project [bnc#458535]
- osc build: support more options: --icecream, --ccache, --with, --without
- osc build: --keep-pkgs also saves the src.rpm now
- osc build: small fix in debuginfo handling
- osc build: small fix in debuginfo handling
- osc build: new armv7el arch for all binaries for up to ARMv7 EABI with VFP
@ -331,7 +331,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
- osc sr show: show the current state's comment
- osc sr log: new command to show the history of a given id
- osc sr: enable requests for submitting new packages
- osc build: implement --no-checks
- osc build: implement --no-checks
- osc build: be less strict on the arguments, and guess what's needed. For instance:
* osc build PLATFORM ARCH BUILD_DESCR
* osc build PLATFORM (ARCH = hostarch, BUILD_DESCR guessed)
@ -339,7 +339,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
* osc build BUILD_DESCR (PLATFORM = build_platform (config option), ARCH = hostarch)
* osc build (PLATFORM = build_platform (config option), ARCH = hostarch, BUILD_DESCR guessed)
- osc build: download after the target architecture check
- osc addremove: bugfixes, --recursive option
- osc addremove: bugfixes, --recursive option
- osc init: added support to initialize a project dir
- osc metafromspec: new alias for 'updatepacmetafromspec' which is hard to remember
- osc updatepacmetafromspec: also update URL
@ -356,20 +356,20 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
- osc build: the --extra-pkgs option is now a configurable setting in .oscrc.
Default is "extra-pkgs = vim gdb strace"
- .oscrc: make tilde expansion work on the packagecachedir setting
- osc update / checkout: don't check out a working copy, or update an existing
- osc update / checkout: don't check out a working copy, or update an existing
one, when a source link cannot be applied [bnc#409373]
0.106:
- osc rdiff / osc submitreq show: diff the _expanded_ sources [bnc#408267]
- osc submitreq list: show author's name
- osc submitreq list: show author's name
- osc submitreq: shortcut alias 'sr' added
0.105:
- osc submitreq list:
- osc submitreq list:
- can now be called without parameters, applying to the working copy then.
- calling it in a project directory is also possible now.
- output was improved. Newest requests are listed first.
@ -411,7 +411,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
0.103:
- osc submitreq create: simplify by make osc guess needed parameters, if
- osc submitreq create: simplify by make osc guess needed parameters, if
there is a working copy and it is a source link.
- osc submitreq create: don't stop on packages that have a devel project
defined, if the submit actually comes from that project.
@ -459,7 +459,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
- osc maintainer: new -D/--devel-project switch
- BUILD_DIST environment variable will be ignored (bnc#359846)
The following environment variables can still be used:
* OSC_SU_WRAPPER overrides the setting of su-wrapper.
* OSC_SU_WRAPPER overrides the setting of su-wrapper.
* OSC_BUILD_ROOT overrides the setting of build-root.
* OSC_PACKAGECACHEDIR overrides the setting of packagecachedir.
@ -560,7 +560,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
0.96:
- following suggestions by Christian Boltz and Michal Marek, osc now memorizes
where a working copy was checked out from, saving the api server url to
.osc/_apiurl.
.osc/_apiurl.
- implement 'info' subcommand
- use new api routes in all places
- buildhistory works again
@ -571,7 +571,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
- applied patch from Michael Marek, fixing all places where error
messages were printed to stdout instead of stderr. [#239404]
- osc is now easier to work with when using alternative API servers. The
configured server can be overriden with -A <url> on the commandline.
configured server can be overriden with -A <url> on the commandline.
"apisrv" in the config takes a URL now, so the variable "scheme" which was
needed in addition before becomes obsolete. For backward compatibility, a
hostname (and scheme variable) are accepted like before. Likewise, the auth
@ -588,7 +588,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
5 times in an iChain setup
- adding http_GET/POST/PUT/DELETE() functions, which dispatch to
http_request(), and use them everywhere
- removing othermethods.py
- removing othermethods.py
- keeping urlopen(), in case it is used from externally, but have it print out
a "depracated" message
- finally, global option -H enables HTTP traffic debugging
@ -598,7 +598,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
- suppress the legend in prjresults by default (show with -l)
- --version shows the program version number
- fix the commit subcommand's argument handling. The following works correctly
now: osc ci ../test/onlyinwc `pwd` fstab ../test/f2
now: osc ci ../test/onlyinwc `pwd` fstab ../test/f2
- fix the download progress meter to work with small terminals [#266989]
- update: when updating multiple packages, print each package name
- make 'results' subcommand many times faster, by making only a single request
@ -643,7 +643,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
0.8:
- build: use configuration from *local* specfile (e.g. BuildRequires)
- build: let envvars OSC_SU_WRAPPER and OSC_BUILD_ROOT override config
- build: let envvars OSC_SU_WRAPPER and OSC_BUILD_ROOT override config
- build: allow 'dynamical' build-root setting by using %(repo)s and %(arch)s
- add 'createpac/editpac' and 'createprj/editprj' subcommands which
are similar to 'editmeta' but should be more logical to find
@ -672,7 +672,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
metadata from a specfile
- fix profiling wrapper
- set User-agent
- bugfixes:
- bugfixes:
- fix handling of filenames with '+' signs
- make 'resolved' more robust
- fix merge on 'update' if called from another directory
@ -703,7 +703,7 @@ Changes were from Marcus_H, poeml, dmueller, tpatzig.
0.4:
- allow 'up' inside a project directory (will automatically pull in all new
packages). (For past checkouts, you may need to put the project name into
packages). (For past checkouts, you may need to put the project name into
$prjdir/.osc/_project yourself).
- checkout: preserve mtimes
- add diff3 merge support. Locally modified files are merged with upstream changes

View File

@ -1,10 +1,10 @@
jw, Tue Oct 20 22:09:16 CEST 2009
jw, Tue Oct 20 22:09:16 CEST 2009
This is a feature suggestion for easier osc commandline handling.
Many commands require specifying Project and/or Package names.
The current situation is not satisfying for the following reasons:
- inconsistent defaults. Some osc subcommands can take project
- inconsistent defaults. Some osc subcommands can take project
and/or package names from the current directory, if run inside a checkout
tree. If both project and package can use this default or only one, and if
one, which, depends on the command. Users have a hard time memorizing
@ -12,22 +12,22 @@ The current situation is not satisfying for the following reasons:
Examples as of osc version 0.123:
osc maintainer PRJ [PKG]
- does not look in the current directory.
- need at least PRJ.
- need at least PRJ.
osc list [PRJ [PKG]]
- Never looks at the current directory.
- lists all projects, if run without parameters.
- Never looks at the current directory.
- lists all projects, if run without parameters.
osc checkout [PRJ] PKG
osc checkout PRJ
- takes project from current directory, if inside a checkout tree
- else operates on an entire project.
- else operates on an entire project.
osc checkin [ARG]
- defaults to current project and package,
- if arg is a subdirectory, project is taken from current directory
- if arg is a file, both project and package are taken from current
directory.
- defaults to current project and package,
- if arg is a subdirectory, project is taken from current directory
- if arg is a file, both project and package are taken from current
directory.
osc results [PRJ PKG]
- takes either both or none from current directory.
- many commands do not look into the current directory,
- many commands do not look into the current directory,
they are cumbersome to use.
- sometimes PRJ/PKG can be used instead of PRJ PKG
@ -50,25 +50,25 @@ used in parallel.
--pkg, --pack, --package are synonyms.
osc shall support aliases, to save typing. Some implicit aliases exist,
with well defined magic effects. Aliases substitution is literal.
with well defined magic effects. Aliases substitution is literal.
They can replace options including their parameters, or just the option, or
just the parameters.
- (a dash) expands to --prj openSUSE:Factory
(or --prj followed by any other project as defined in
- (a dash) expands to --prj openSUSE:Factory
(or --prj followed by any other project as defined in
~/.oscrc:default_project )
--prj - is synonymous to just -, for consistency.
--prj - is synonymous to just -, for consistency.
. (a dot) evaluates the current working directory, searching for
.osc/_apiurl, .osc/_project, and .osc/_package
Implicit --apiurl, --prj, or --pkg options are constructed as far
as available from the current directory and as far as not already
present in the command line.
If a dot is used as parameter to an option, it has a more
deterministic meaning.
--apiurl . Substitute only the current apiurl,
--prj . Substitute the current project name, and provides
a default for --apiurl unless given.
--pkg . Substitures current package name likewise.
.osc/_apiurl, .osc/_project, and .osc/_package
Implicit --apiurl, --prj, or --pkg options are constructed as far
as available from the current directory and as far as not already
present in the command line.
If a dot is used as parameter to an option, it has a more
deterministic meaning.
--apiurl . Substitute only the current apiurl,
--prj . Substitute the current project name, and provides
a default for --apiurl unless given.
--pkg . Substitures current package name likewise.
./. expands to --prj . --pkg .
./PKG expands to --prj . --pkg PKG
@ -83,10 +83,10 @@ printed as debug output.
online help of osc commands shall refer to the above syntax like this:
osc CMD ... PROJ/PACK
osc CMD ... PROJ/PACK
An additional help entry
An additional help entry
osc help 'PROJ/PACK'
osc help 'PROJ/PACK'
shall explain the relevant details as presented herein.

37
README
View File

@ -14,17 +14,18 @@ RPM packages are here (rpm-md repository):
http://download.opensuse.org/repositories/openSUSE:/Tools/
To install from svn, do
python setup.py build
python setup.py install
# create a symlink 'osc' in your path pointing to osc.py.
ln -s osc-wrapper.py /usr/bin/osc
python setup.py build
python setup.py install
# create a symlink 'osc' in your path pointing to osc.py.
ln -s osc-wrapper.py /usr/bin/osc
Alternatively, you can directly use osc-wrapper.py from the source dir
(which is easier if you develop on osc).
The program needs the cElementTree python module installed. On SUSE, the
respective package is called python-elementtree (before 10.2: python-xml).
respective package is called python-elementtree (before 10.2: python-xml).
For local building, you will need python-urlgrabber in addition. Those are
standard package on SUSE Linux since a while. If your version is too old, you
can find python-elementtree and python-urlgrabber here:
@ -132,29 +133,29 @@ USAGE EXAMPLES:
(online at http://en.opensuse.org/Build_Service/CLI )
To list existing content on the server
osc ls # list projects
osc ls Apache # list packages in a project
osc ls Apache subversion # list files of package of a project
osc ls # list projects
osc ls Apache # list packages in a project
osc ls Apache subversion # list files of package of a project
Check out content
osc co Apache # entire project
osc co Apache subversion # a package
osc co Apache subversion foo # single file
osc co Apache # entire project
osc co Apache subversion # a package
osc co Apache subversion foo # single file
Update a working copy
osc up
osc up [pac_dir] # update a single package by its path
osc up * # from within a project dir, update all packages
osc up # from within a project dir, update all packages
AND check out all newly added packages
osc up [pac_dir] # update a single package by its path
osc up * # from within a project dir, update all packages
osc up # from within a project dir, update all packages
# AND check out all newly added packages
If an update can't be merged automatically, a file is in 'C' (conflict)
state, and conflicts are marked with special <<<<<<< and >>>>>>> lines.
state, and conflicts are marked with special <<<<<<< and >>>>>>> lines.
After manually resolving the problem, use
osc resolved foo
Upload change content
osc ci # current dir
osc ci # current dir
osc ci <dir>
osc ci file1 file2 ...
@ -171,7 +172,7 @@ Adds all new files in local copy and removes all disappeared files.
osc addremove
Generates a diff, to view the changes
osc diff # current dir
osc diff # current dir
osc diff file1 file2 ...
Shows the build results of the package

8
TODO
View File

@ -10,7 +10,7 @@ CRITICAL:
-A apiurl prj/pkg
-A apiurl prj:pkg
apiurl/source/prj/pkg
The current working directory or its descendants should provide defaults
The current working directory or its descendants should provide defaults
for apiurl, prj and/or pkg.
MAJOR:
@ -24,13 +24,13 @@ NORMAL:
- implement (svn-like) switch command
- implement 'mv' command
- commit: check if errors during PUT are handled sensibly, so the change is
not committed to localmeta
not committed to localmeta
- add switch to commit to change repository options, like to e.g. disable publishing?
- implement optional logging to .osc/log, which could be useful for debugging bugs like
the one where api.opensuse.org sends empty replies (a hard-to-catch one)
MINOR:
MINOR:
- osc checkout should display file download progress (bnc#442115)
- adjust zsh completion to work with cmdln.py implementation
@ -42,7 +42,7 @@ MINOR:
JW:
FIXME: osc co overwrites local changes without warning.
FIXME: when branching, the user should be added to bugowner, for the branch project.
FIXME: 'osc rq' shall default to 'osc rq list -M -B -s all',
FIXME: 'osc rq' shall default to 'osc rq list -M -B -s all',
where -B shows requests related to packages where I am the bugowner.
FIXME: 'osc log openSUSE:Factory PKG' should also point to the bsdevelproject

2
dist/osc.complete vendored
View File

@ -162,7 +162,7 @@ rq|request)
show)
if ((count == 3)) ; then
builtin compgen -W '--diff' -- "${cmdline[3]}"
else
else
builtin echo -n 'ID'
fi
;;

View File

@ -231,27 +231,27 @@ def get_built_files(pacdir, pactype):
def get_repo(path):
"""Walks up path looking for any repodata directories.
@param path path to a directory
@return str path to repository directory containing repodata directory
"""
oldDirectory = None
currentDirectory = os.path.abspath(path)
repositoryDirectory = None
# while there are still parent directories
while currentDirectory != oldDirectory:
children = os.listdir(currentDirectory)
if "repodata" in children:
repositoryDirectory = currentDirectory
break
# ascend
oldDirectory = currentDirectory
currentDirectory = os.path.abspath(os.path.join(oldDirectory,
os.pardir))
return repositoryDirectory
def get_prefer_pkgs(dirs, wanted_arch, type):
@ -259,11 +259,11 @@ def get_prefer_pkgs(dirs, wanted_arch, type):
from util import repodata, packagequery, cpio
paths = []
repositories = []
suffix = '*.rpm'
if type == 'dsc':
suffix = '*.deb'
for dir in dirs:
# check for repodata
repository = get_repo(dir)
@ -271,15 +271,15 @@ def get_prefer_pkgs(dirs, wanted_arch, type):
paths += glob.glob(os.path.join(os.path.abspath(dir), suffix))
else:
repositories.append(repository)
packageQueries = packagequery.PackageQueries(wanted_arch)
for repository in repositories:
repodataPackageQueries = repodata.queries(repository)
for packageQuery in repodataPackageQueries:
packageQueries.add(packageQuery)
for path in paths:
if path.endswith('src.rpm'):
continue
@ -287,10 +287,10 @@ def get_prefer_pkgs(dirs, wanted_arch, type):
continue
packageQuery = packagequery.PackageQuery.query(path)
packageQueries.add(packageQuery)
prefer_pkgs = dict((name, packageQuery.path())
for name, packageQuery in packageQueries.iteritems())
depfile = create_deps(packageQueries.values())
cpio = cpio.CpioWrite()
cpio.add('deps', '\n'.join(depfile))
@ -582,7 +582,7 @@ def main(opts, argv):
# OBS 1.5 and before has no downloadurl defined in buildinfo
if bi.downloadurl:
urllist.append(bi.downloadurl + '/%(extproject)s/%(extrepository)s/%(arch)s/%(filename)s')
if not opts.cpio_bulk_download:
if not opts.cpio_bulk_download:
urllist.append( '%(apiurl)s/build/%(project)s/%(repository)s/%(repoarch)s/%(repopackage)s/%(repofilename)s' )
fetcher = Fetcher(cachedir = config['packagecachedir'],

View File

@ -388,7 +388,7 @@ class Osc(cmdln.Cmdln):
for p in meta_get_packagelist(apiurl, project):
if p.startswith("_patchinfo:"):
patchinfo = p
if opts.force or not patchinfo:
print "Creating initial patchinfo..."
query='cmd=createpatchinfo'
@ -798,7 +798,7 @@ class Osc(cmdln.Cmdln):
(actionxml, cgi.escape(opts.message or ""))
u = makeurl(apiurl, ['request'], query='cmd=create')
f = http_POST(u, data=xml)
root = ET.parse(f).getroot()
sr_ids.append(root.get('id'))
@ -1589,7 +1589,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
package, tproject)
if r is None:
print >>sys.stderr, 'ERROR: Attribute branch call came not back with a project.'
print >>sys.stderr, 'ERROR: Attribute branch call came not back with a project.'
sys.exit(1)
print "Project " + r + " created."
@ -1940,9 +1940,9 @@ Please submit there instead, or use --nodevelproject to force direct submission.
args = slash_split(args)
args = expand_proj_pack(args)
## FIXME:
## FIXME:
## if there is only one argument, and it ends in .ymp
## then fetch it, Parse XML to get the first
## then fetch it, Parse XML to get the first
## metapackage.group.repositories.repository.url
## and construct zypper cmd's for all
## metapackage.group.software.item.name
@ -2862,7 +2862,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
raise oscerr.WrongArgs('Too many arguments.')
else:
project, package, repository, arch = args
offset=0
if opts.start:
offset = int(opts.start)
@ -2952,7 +2952,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
wd = os.curdir
args = slash_split(args)
project = package = repository = arch = None
if len(args) < 2:
self.print_repos()
@ -2995,9 +2995,9 @@ Please submit there instead, or use --nodevelproject to force direct submission.
will be triggered when a certain package changes.
This is no guarantee, since the new build might have changed dependencies.
dependson shows the build dependencies inside of a project, valid for a
dependson shows the build dependencies inside of a project, valid for a
given repository and architecture.
NOTE: to see all binary packages, which can trigger a build you need to
NOTE: to see all binary packages, which can trigger a build you need to
refer the buildinfo, since this command shows only the dependencies
inside of a project.
@ -3017,7 +3017,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
wd = os.curdir
args = slash_split(args)
project = packages = repository = arch = reverse = None
if len(args) < 2 and (is_package_dir('.') or is_project_dir('.')):
self.print_repos()
@ -3088,7 +3088,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
"""
wd = os.curdir
args = slash_split(args)
if len(args) < 2 and is_package_dir('.'):
self.print_repos()
@ -3149,7 +3149,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
wd = os.curdir
args = slash_split(args)
if len(args) < 2 and is_package_dir('.'):
self.print_repos()
@ -4121,7 +4121,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
extra_limiter='attribute/@name="%s"' % (opts.limit_to_attribute)
if not opts.substring:
opts.exact = True
role_filter=None
if for_user:
@ -4374,7 +4374,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
def do_bugowner(self, subcmd, opts, *args):
"""${cmd_name}: Show bugowners of a project/package
osc bugowner PRJ
osc bugowner PRJ
osc bugowner PRJ PKG
Shortcut for osc maintainer -B [PRJ] PKG
@ -4817,7 +4817,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
dir_oldpatched = { 'apiurl': p.apiurl, 'project': p.prjname, 'package': p.name, 'srcmd5': p.srcmd5 }
dir_oldpatched['entries'] = [[f.name, f.md5] for f in p.filelist]
query = { 'rev': linkinfo.srcmd5 }
u = makeurl(p.apiurl, ['source', linkinfo.project, linkinfo.package], query=query)
f = http_GET(u)

View File

@ -156,7 +156,7 @@ apiurl = %(apiurl)s
# This is convenient when sharing the buildroot with ordinary userids
# on the host.
# This should not be 0
# build-uid =
# build-uid =
# extra packages to install when building packages locally (osc build)
# this corresponds to osc build's -x option and can be overridden with that

View File

@ -1727,7 +1727,7 @@ def parse_buildlogurl(buildlogurl):
m = BUILDLOGURL_RE.match(buildlogurl)
if not m:
raise oscerr.WrongArgs('\'%s\' does not look like url with a build log' % buildlogurl)
return (m.group('apiurl'), m.group('project'), m.group('package'), m.group('repository'), m.group('arch'))
def slash_split(l):
@ -3642,7 +3642,7 @@ def get_prj_results(apiurl, prj, hide_legend=False, csv=False, status_filter=Non
for i in range(0, len(targets)):
line.append(str(i%10))
r.append(' '.join(line))
r.append('')
if not hide_legend and len(pacs):

View File

@ -176,7 +176,7 @@ class myHTTPSHandler(M2Crypto.m2urllib2.HTTPSHandler):
# Our change: Check to see if we're using a proxy.
# Then create an appropriate ssl-aware connection.
full_url = req.get_full_url()
full_url = req.get_full_url()
target_host = urlparse.urlparse(full_url)[1]
if (target_host != host):

View File

@ -9,34 +9,34 @@ class PackageQueries(dict):
package query, to a name, the package is evaluated to see if it matches the
wanted architecture and if it has a greater version than the current value.
"""
# map debian arches to common obs arches
architectureMap = {'i386': ['i586', 'i686'], 'amd64': ['x86_64']}
architectureMap = {'i386': ['i586', 'i686'], 'amd64': ['x86_64']}
def __init__(self, wanted_architecture):
self.wanted_architecture = wanted_architecture
super(PackageQueries, self).__init__()
def add(self, query):
"""Adds package query to dict if it is of the correct architecture and
is newer (has a greater version) than the currently assigned package.
@param a PackageQuery
"""
self.__setitem__(query.name(), query)
def __setitem__(self, name, query):
if name != query.name():
raise ValueError("key '%s' does not match "
"package query name '%s'" % (name, query.name()))
architecture = query.arch()
if (architecture in [self.wanted_architecture, 'noarch', 'all'] or
self.wanted_architecture in self.architectureMap.get(architecture,
[])):
current_query = self.get(name)
# if current query does not exist or is older than this new query
if current_query is None or current_query.vercmp(query) <= 0:
super(PackageQueries, self).__setitem__(name, query)
@ -63,10 +63,10 @@ class PackageQuery:
def description(self):
raise NotImplementedError
def path(self):
raise NotImplementedError
def provides(self):
raise NotImplementedError

View File

@ -25,7 +25,7 @@ OPERATOR_BY_FLAGS = {
def primaryPath(directory):
"""Returns path to the primary repository data file.
@param directory repository directory that contains the repodata subdirectory
@return str path to primary repository data file
@raise IOError if repomd.xml contains no primary location
@ -33,7 +33,7 @@ def primaryPath(directory):
metaDataPath = os.path.join(directory, "repodata", "repomd.xml")
elementTree = ET.parse(metaDataPath)
root = elementTree.getroot()
for dataElement in root:
if dataElement.get("type") == "primary":
locationElement = dataElement.find(namespace("repo") + "location")
@ -43,110 +43,110 @@ def primaryPath(directory):
break
else:
raise IOError("'%s' contains no primary location" % metaDataPath)
return primaryPath
def queries(directory):
"""Returns a list of RepoDataQueries constructed from the repodata under
the directory.
@param directory path to a repository directory (parent directory of
repodata directory)
@return list of RepoDataQuery instances
@raise IOError if repomd.xml contains no primary location
"""
path = primaryPath(directory)
gunzippedPrimary = gzip.GzipFile(path)
elementTree = ET.parse(gunzippedPrimary)
root = elementTree.getroot()
packageQueries = []
for packageElement in root:
packageQuery = RepoDataQuery(directory, packageElement)
packageQueries.append(packageQuery)
return packageQueries
class RepoDataQuery(object):
"""PackageQuery that reads in data from the repodata directory files."""
def __init__(self, directory, element):
"""Creates a RepoDataQuery from the a package Element under a metadata
Element in a primary.xml file.
@param directory repository directory path. Used to convert relative
paths to full paths.
@param element package Element
"""
self.__directory = os.path.abspath(directory)
self.__element = element
def __formatElement(self):
return self.__element.find(namespace("common") + "format")
def __parseEntry(self, element):
entry = element.get("name")
flags = element.get("flags")
if flags is not None:
version = element.get("ver")
operator = OPERATOR_BY_FLAGS[flags]
entry += " %s %s" % (operator, version)
release = element.get("rel")
if release is not None:
entry += "-%s" % release
return entry
def __parseEntryCollection(self, collection):
formatElement = self.__formatElement()
collectionElement = formatElement.find(namespace("rpm") + collection)
entries = []
if collectionElement is not None:
for entryElement in collectionElement.findall(namespace("rpm") +
"entry"):
entry = self.__parseEntry(entryElement)
entries.append(entry)
return entries
def __versionElement(self):
return self.__element.find(namespace("common") + "version")
def arch(self):
return self.__element.find(namespace("common") + "arch").text
def description(self):
return self.__element.find(namespace("common") + "description").text
def distribution(self):
return None
def epoch(self):
return self.__versionElement().get("epoch")
def name(self):
return self.__element.find(namespace("common") + "name").text
def path(self):
locationElement = self.__element.find(namespace("common") + "location")
relativePath = locationElement.get("href")
absolutePath = os.path.join(self.__directory, relativePath)
return absolutePath
def provides(self):
return self.__parseEntryCollection("provides")
def release(self):
return self.__versionElement().get("rel")
def requires(self):
return self.__parseEntryCollection("requires")
def vercmp(self, other):
res = osc.util.rpmquery.RpmQuery.rpmvercmp(str(self.epoch()), str(other.epoch()))
if res != 0:
@ -156,6 +156,6 @@ class RepoDataQuery(object):
return res
res = osc.util.rpmquery.RpmQuery.rpmvercmp(self.release(), other.release())
return res
def version(self):
return self.__versionElement().get("ver")

View File

@ -210,7 +210,7 @@ class RpmQuery(packagequery.PackageQuery):
def path(self):
return self.__path
def provides(self):
return self.__reqprov(1047, 1112, 1113)