During my work on BZ 1079387 I clean up reposync source as side effect.
See attachments. And if somebody will apply patch from 1079387 I would appreciate as well. -- Miroslav Suchy, RHCE, RHCDS Red Hat, Senior Software Engineer, #brno, #devexp, #fedora-buildsys
>From 5a9b74dc092a0200f5dc6a61371e51719737f52b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= <msu...@redhat.com> Date: Wed, 26 Mar 2014 13:57:29 +0100 Subject: [PATCH 8/8] get rid of python 2.4 compat python 2.4 is used in el5 and new yum-utils are build only for el6+, where is newer python --- reposync.py | 12 +----------- repotrack.py | 12 +----------- yum-utils.spec | 2 +- 3 files changed, 3 insertions(+), 23 deletions(-) diff --git a/reposync.py b/reposync.py index 225423b..6500db6 100755 --- a/reposync.py +++ b/reposync.py @@ -50,16 +50,6 @@ import logging from urlgrabber.progress import TextMeter, TextMultiFileMeter import urlgrabber -# for yum 2.4.X compat -def sortPkgObj(pkg1, pkg2): - """sorts a list of yum package objects by name""" - if pkg1.name > pkg2.name: - return 1 - elif pkg1.name == pkg2.name: - return 0 - else: - return -1 - class RepoSync(yum.YumBase): def __init__(self, opts): yum.YumBase.__init__(self) @@ -289,7 +279,7 @@ def main(): if hasattr(urlgrabber.progress, 'text_meter_total_size'): urlgrabber.progress.text_meter_total_size(remote_size) - download_list.sort(sortPkgObj) + download_list.sort(key=lambda pkg: pkg.name) if opts.urls: for pkg in download_list: print urljoin(pkg.repo.urls[0], pkg.relativepath) diff --git a/repotrack.py b/repotrack.py index 6c6a18c..8dd8b9c 100755 --- a/repotrack.py +++ b/repotrack.py @@ -38,16 +38,6 @@ from yum.constants import * from yum.packages import parsePackages from yum.packageSack import ListPackageSack -# for yum 2.4.X compat -def sortPkgObj(pkg1 ,pkg2): - """sorts a list of yum package objects by name""" - if pkg1.name > pkg2.name: - return 1 - elif pkg1.name == pkg2.name: - return 0 - else: - return -1 - class RepoTrack(yum.YumBase): def __init__(self, opts): yum.YumBase.__init__(self) @@ -224,7 +214,7 @@ def main(): this_sack.addList(download_list) download_list = this_sack.returnNewestByNameArch() - download_list.sort(sortPkgObj) + download_list.sort(key=lambda pkg: pkg.name) for pkg in download_list: repo = my.repos.getRepo(pkg.repoid) remote = pkg.returnSimple('relativepath') diff --git a/yum-utils.spec b/yum-utils.spec index de6fbfd..dd206b3 100644 --- a/yum-utils.spec +++ b/yum-utils.spec @@ -20,7 +20,7 @@ BuildArch: noarch # For new findRepos() API. Requires: yum >= 3.4.3-96 Requires: python-kitchen -BuildRequires: python-devel >= 2.4 +BuildRequires: python-devel BuildRequires: gettext BuildRequires: intltool Provides: yum-utils-translations = %{version}-%{release} -- 1.8.5.3
>From ed725b1854b5f1e48208ef030b4da1018e7d3898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= <msu...@redhat.com> Date: Wed, 26 Mar 2014 13:36:20 +0100 Subject: [PATCH 7/8] add i18n to reposync --- reposync.py | 54 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/reposync.py b/reposync.py index a675542..225423b 100755 --- a/reposync.py +++ b/reposync.py @@ -40,6 +40,8 @@ import stat from optparse import OptionParser from urlparse import urljoin +from yumutils.i18n import _ + import yum import yum.Errors from yum.packageSack import ListPackageSack @@ -83,47 +85,47 @@ def localpkgs(directory): return cache def parseArgs(): - usage = """ + usage = _(""" Reposync is used to synchronize a remote yum repository to a local directory using yum to retrieve the packages. %s [options] - """ % sys.argv[0] + """) % sys.argv[0] parser = OptionParser(usage=usage) parser.add_option("-c", "--config", default='/etc/yum.conf', - help='config file to use (defaults to /etc/yum.conf)') + help=_('config file to use (defaults to /etc/yum.conf)')) parser.add_option("-a", "--arch", default=None, - help='act as if running the specified arch (default: current arch, note: does not override $releasever. x86_64 is a superset for i*86.)') + help=_('act as if running the specified arch (default: current arch, note: does not override $releasever. x86_64 is a superset for i*86.)')) parser.add_option("--source", default=False, dest="source", action="store_true", - help='operate on source packages') + help=_('operate on source packages')) parser.add_option("-r", "--repoid", default=[], action='append', - help="specify repo ids to query, can be specified multiple times (default is all enabled)") + help=_("specify repo ids to query, can be specified multiple times (default is all enabled)")) parser.add_option("-e", "--cachedir", - help="directory in which to store metadata") + help=_("directory in which to store metadata")) parser.add_option("-t", "--tempcache", default=False, action="store_true", - help="Use a temp dir for storing/accessing yum-cache") + help=_("Use a temp dir for storing/accessing yum-cache")) parser.add_option("-d", "--delete", default=False, action="store_true", - help="delete local packages no longer present in repository") + help=_("delete local packages no longer present in repository")) parser.add_option("-p", "--download_path", dest='destdir', - default=os.getcwd(), help="Path to download packages to: defaults to current dir") + default=os.getcwd(), help=_("Path to download packages to: defaults to current dir")) parser.add_option("--norepopath", dest='norepopath', default=False, action="store_true", - help="Don't add the reponame to the download path. Can only be used when syncing a single repository (default is to add the reponame)") + help=_("Don't add the reponame to the download path. Can only be used when syncing a single repository (default is to add the reponame)")) parser.add_option("-g", "--gpgcheck", default=False, action="store_true", - help="Remove packages that fail GPG signature checking after downloading") + help=_("Remove packages that fail GPG signature checking after downloading")) parser.add_option("-u", "--urls", default=False, action="store_true", - help="Just list urls of what would be downloaded, don't download") + help=_("Just list urls of what would be downloaded, don't download")) parser.add_option("-n", "--newest-only", dest='newest', default=False, action="store_true", - help="Download only newest packages per-repo") + help=_("Download only newest packages per-repo")) parser.add_option("-q", "--quiet", default=False, action="store_true", - help="Output as little as possible") + help=_("Output as little as possible")) parser.add_option("-l", "--plugins", default=False, action="store_true", - help="enable yum plugin support") + help=_("enable yum plugin support")) parser.add_option("-m", "--downloadcomps", default=False, action="store_true", - help="also download comps.xml") + help=_("also download comps.xml")) parser.add_option("", "--download-metadata", dest="downloadmd", default=False, action="store_true", - help="download all the non-default metadata") + help=_("download all the non-default metadata")) (opts, args) = parser.parse_args() return (opts, args) @@ -135,11 +137,11 @@ def main(): try: os.makedirs(opts.destdir) except OSError, e: - print >> sys.stderr, "Error: Cannot create destination dir %s" % opts.destdir + print >> sys.stderr, _("Error: Cannot create destination dir %s") % opts.destdir sys.exit(1) if not os.access(opts.destdir, os.W_OK) and not opts.urls: - print >> sys.stderr, "Error: Cannot write to destination dir %s" % opts.destdir + print >> sys.stderr, _("Error: Cannot write to destination dir %s") % opts.destdir sys.exit(1) my = RepoSync(opts=opts) @@ -152,7 +154,7 @@ def main(): if opts.tempcache: if not my.setCacheDir(force=True, reuse=False): - print >> sys.stderr, "Error: Could not make cachedir, exiting" + print >> sys.stderr, _("Error: Could not make cachedir, exiting") sys.exit(50) my.conf.uid = 1 # force locking of user cache elif opts.cachedir: @@ -163,7 +165,7 @@ def main(): try: my.doLock() except yum.Errors.LockError, e: - print >> sys.stderr, "Error: %s" % e + print >> sys.stderr, _("Error: %s") % e sys.exit(50) # Use progress bar display when downloading repo metadata @@ -179,12 +181,12 @@ def main(): for glob in opts.repoid: add_repos = my.repos.findRepos(glob) if not add_repos: - print >> sys.stderr, "Warning: cannot find repository %s" % glob + print >> sys.stderr, _("Warning: cannot find repository %s") % glob continue myrepos.extend(add_repos) if not myrepos: - print >> sys.stderr, "No repositories found" + print >> sys.stderr, _("No repositories found") sys.exit(1) # disable them all @@ -197,7 +199,7 @@ def main(): # --norepopath can only be sensibly used with a single repository: if len(my.repos.listEnabled()) > 1 and opts.norepopath: - print >> sys.stderr, "Error: Can't use --norepopath with multiple repositories" + print >> sys.stderr, _("Error: Can't use --norepopath with multiple repositories") sys.exit(1) try: @@ -206,7 +208,7 @@ def main(): arches += ['src'] my.doSackSetup(arches) except yum.Errors.RepoError, e: - print >> sys.stderr, "Error setting up repositories: %s" % e + print >> sys.stderr, _("Error setting up repositories: %s") % e # maybe this shouldn't be entirely fatal sys.exit(1) -- 1.8.5.3
>From 22ab40b453eeabd946ed35cc49fba7eb032b7196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= <msu...@redhat.com> Date: Wed, 26 Mar 2014 13:11:28 +0100 Subject: [PATCH 6/8] codestyle changes addressing: C: 52, 0: No space allowed before comma def sortPkgObj(pkg1 ,pkg2): ^ (bad-whitespace) C: 52, 0: Exactly one space required after comma def sortPkgObj(pkg1 ,pkg2): ^ (bad-whitespace) C: 60, 0: Trailing whitespace (trailing-whitespace) C: 82, 0: No space allowed after bracket cache[name] = { 'path': fn, 'size': st.st_size, 'device': st.st_dev } ^ (bad-whitespace) C: 82, 0: No space allowed before bracket cache[name] = { 'path': fn, 'size': st.st_size, 'device': st.st_dev } ^ (bad-whitespace) C:104, 0: Trailing whitespace (trailing-whitespace) C:108, 0: Trailing whitespace (trailing-whitespace) C:114, 0: Trailing whitespace (trailing-whitespace) C:116, 0: Trailing whitespace (trailing-whitespace) C:118, 0: Trailing whitespace (trailing-whitespace) C:120, 0: Trailing whitespace (trailing-whitespace) C:124, 0: Trailing whitespace (trailing-whitespace) C:124, 0: Exactly one space required after comma parser.add_option("","--download-metadata", dest="downloadmd", ^ (bad-whitespace) C:125, 0: Trailing whitespace (trailing-whitespace) C:133, 0: Trailing whitespace (trailing-whitespace) C:140, 0: Trailing whitespace (trailing-whitespace) C:144, 0: Trailing whitespace (trailing-whitespace) C:177, 0: Trailing whitespace (trailing-whitespace) C:189, 0: Trailing whitespace (trailing-whitespace) C:193, 0: Trailing whitespace (trailing-whitespace) C:206, 0: Exactly one space required after assignment arches += ['src'] ^^ (bad-whitespace) C:212, 0: Trailing whitespace (trailing-whitespace) C:221, 0: Trailing whitespace (trailing-whitespace) C:256, 0: Trailing whitespace (trailing-whitespace) C:269, 0: Exactly one space required before assignment basename = os.path.basename(resultfile) ^ (bad-whitespace) C:273, 0: Exactly one space required after comma except yum.Errors.RepoMDError,e : ^ (bad-whitespace) C:273, 0: No space allowed before : except yum.Errors.RepoMDError,e : ^ (bad-whitespace) C:276, 0: Trailing whitespace (trailing-whitespace) C:335, 0: Trailing whitespace (trailing-whitespace) --- reposync.py | 49 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/reposync.py b/reposync.py index 8f38adc..a675542 100755 --- a/reposync.py +++ b/reposync.py @@ -49,7 +49,7 @@ from urlgrabber.progress import TextMeter, TextMultiFileMeter import urlgrabber # for yum 2.4.X compat -def sortPkgObj(pkg1 ,pkg2): +def sortPkgObj(pkg1, pkg2): """sorts a list of yum package objects by name""" if pkg1.name > pkg2.name: return 1 @@ -57,7 +57,7 @@ def sortPkgObj(pkg1 ,pkg2): return 0 else: return -1 - + class RepoSync(yum.YumBase): def __init__(self, opts): yum.YumBase.__init__(self) @@ -79,7 +79,7 @@ def localpkgs(directory): for pkg in subcache.keys(): cache[pkg] = subcache[pkg] elif stat.S_ISREG(st.st_mode) and name.endswith(".rpm"): - cache[name] = { 'path': fn, 'size': st.st_size, 'device': st.st_dev } + cache[name] = {'path': fn, 'size': st.st_size, 'device': st.st_dev} return cache def parseArgs(): @@ -101,28 +101,28 @@ def parseArgs(): help="specify repo ids to query, can be specified multiple times (default is all enabled)") parser.add_option("-e", "--cachedir", help="directory in which to store metadata") - parser.add_option("-t", "--tempcache", default=False, action="store_true", + parser.add_option("-t", "--tempcache", default=False, action="store_true", help="Use a temp dir for storing/accessing yum-cache") parser.add_option("-d", "--delete", default=False, action="store_true", help="delete local packages no longer present in repository") - parser.add_option("-p", "--download_path", dest='destdir', + parser.add_option("-p", "--download_path", dest='destdir', default=os.getcwd(), help="Path to download packages to: defaults to current dir") parser.add_option("--norepopath", dest='norepopath', default=False, action="store_true", help="Don't add the reponame to the download path. Can only be used when syncing a single repository (default is to add the reponame)") parser.add_option("-g", "--gpgcheck", default=False, action="store_true", help="Remove packages that fail GPG signature checking after downloading") - parser.add_option("-u", "--urls", default=False, action="store_true", + parser.add_option("-u", "--urls", default=False, action="store_true", help="Just list urls of what would be downloaded, don't download") - parser.add_option("-n", "--newest-only", dest='newest', default=False, action="store_true", + parser.add_option("-n", "--newest-only", dest='newest', default=False, action="store_true", help="Download only newest packages per-repo") - parser.add_option("-q", "--quiet", default=False, action="store_true", + parser.add_option("-q", "--quiet", default=False, action="store_true", help="Output as little as possible") - parser.add_option("-l", "--plugins", default=False, action="store_true", + parser.add_option("-l", "--plugins", default=False, action="store_true", help="enable yum plugin support") parser.add_option("-m", "--downloadcomps", default=False, action="store_true", help="also download comps.xml") - parser.add_option("","--download-metadata", dest="downloadmd", - default=False, action="store_true", + parser.add_option("", "--download-metadata", dest="downloadmd", + default=False, action="store_true", help="download all the non-default metadata") (opts, args) = parser.parse_args() return (opts, args) @@ -130,18 +130,18 @@ def parseArgs(): def main(): (opts, dummy) = parseArgs() - + if not os.path.exists(opts.destdir) and not opts.urls: try: os.makedirs(opts.destdir) except OSError, e: print >> sys.stderr, "Error: Cannot create destination dir %s" % opts.destdir sys.exit(1) - + if not os.access(opts.destdir, os.W_OK) and not opts.urls: print >> sys.stderr, "Error: Cannot write to destination dir %s" % opts.destdir sys.exit(1) - + my = RepoSync(opts=opts) my.doConfigSetup(fn=opts.config, init_plugins=opts.plugins) @@ -174,7 +174,7 @@ def main(): if len(opts.repoid) > 0: myrepos = [] - + # find the ones we want for glob in opts.repoid: add_repos = my.repos.findRepos(glob) @@ -186,11 +186,11 @@ def main(): if not myrepos: print >> sys.stderr, "No repositories found" sys.exit(1) - + # disable them all for repo in my.repos.repos.values(): repo.disable() - + # enable the ones we like for repo in myrepos: repo.enable() @@ -203,13 +203,13 @@ def main(): try: arches = rpmUtils.arch.getArchList(opts.arch) if opts.source: - arches += ['src'] + arches += ['src'] my.doSackSetup(arches) except yum.Errors.RepoError, e: print >> sys.stderr, "Error setting up repositories: %s" % e # maybe this shouldn't be entirely fatal sys.exit(1) - + exit_code = 0 for repo in my.repos.listEnabled(): reposack = ListPackageSack(my.pkgSack.returnPackages(repoid=repo.id)) @@ -218,7 +218,7 @@ def main(): download_list = reposack.returnNewestByNameArch() else: download_list = list(reposack) - + if opts.norepopath: local_repo_path = opts.destdir else: @@ -253,7 +253,7 @@ def main(): if opts.downloadcomps: wanted_types = ['group'] - + if opts.downloadmd: wanted_types = repo.repoXML.fileTypes() @@ -266,14 +266,14 @@ def main(): try: resultfile = repo.retrieveMD(ftype) - basename = os.path.basename(resultfile) + basename = os.path.basename(resultfile) if ftype == 'group' and opts.downloadcomps: # for compat with how --downloadcomps saved the comps file always as comps.xml basename = 'comps.xml' shutil.copyfile(resultfile, "%s/%s" % (local_repo_path, basename)) - except yum.Errors.RepoMDError,e : + except yum.Errors.RepoMDError, e: if not opts.quiet: my.logger.error("Unable to fetch metadata: %s" % e) - + remote_size = 0 if not opts.urls: for pkg in download_list: @@ -332,4 +332,3 @@ def main(): if __name__ == "__main__": main() - -- 1.8.5.3
>From cd6579dc56564eabf60f324dc2b9677a8f267c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= <msu...@redhat.com> Date: Wed, 26 Mar 2014 13:05:14 +0100 Subject: [PATCH 5/8] W: 45, 0: Unused import getCacheDir (unused-import) --- reposync.py | 1 - 1 file changed, 1 deletion(-) diff --git a/reposync.py b/reposync.py index 135e2b5..8f38adc 100755 --- a/reposync.py +++ b/reposync.py @@ -42,7 +42,6 @@ from urlparse import urljoin import yum import yum.Errors -from yum.misc import getCacheDir from yum.packageSack import ListPackageSack import rpmUtils.arch import logging -- 1.8.5.3
>From 9804f9ad630d7c6e9ffecb6cde23c994cc1f428a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= <msu...@redhat.com> Date: Wed, 26 Mar 2014 13:04:31 +0100 Subject: [PATCH 4/8] remove unused wildcard import --- reposync.py | 1 - 1 file changed, 1 deletion(-) diff --git a/reposync.py b/reposync.py index c9c23e3..135e2b5 100755 --- a/reposync.py +++ b/reposync.py @@ -43,7 +43,6 @@ from urlparse import urljoin import yum import yum.Errors from yum.misc import getCacheDir -from yum.constants import * from yum.packageSack import ListPackageSack import rpmUtils.arch import logging -- 1.8.5.3
>From 7fac93d216af82f55acb2828f11f87c99aeb4363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= <msu...@redhat.com> Date: Wed, 26 Mar 2014 13:00:27 +0100 Subject: [PATCH 3/8] W:280, 8: Unused variable local_size (unused-variable) --- reposync.py | 1 - 1 file changed, 1 deletion(-) diff --git a/reposync.py b/reposync.py index c4b4f7e..c9c23e3 100755 --- a/reposync.py +++ b/reposync.py @@ -277,7 +277,6 @@ def main(): my.logger.error("Unable to fetch metadata: %s" % e) remote_size = 0 - local_size = 0 if not opts.urls: for pkg in download_list: remote = pkg.returnSimple('relativepath') -- 1.8.5.3
>From 03a371b0da82838e133ec897c08859c9243e5f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= <msu...@redhat.com> Date: Wed, 26 Mar 2014 12:59:35 +0100 Subject: [PATCH 2/8] W:134,11: Unused variable junk (unused-variable) --- reposync.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reposync.py b/reposync.py index cc4798d..c4b4f7e 100755 --- a/reposync.py +++ b/reposync.py @@ -131,7 +131,7 @@ def parseArgs(): def main(): - (opts, junk) = parseArgs() + (opts, dummy) = parseArgs() if not os.path.exists(opts.destdir) and not opts.urls: try: -- 1.8.5.3
_______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel