From d6779cc69205a252b9b0dbecbabac792787d5e4b Mon Sep 17 00:00:00 2001 From: Jochen Schmitt Date: Thu, 2 Sep 2010 21:01:11 +0200 Subject: Add a retire command --- src/fedpkg.bash | 7 +++++-- src/fedpkg.py | 22 ++++++++++++++++++++++ src/pyfedpkg/__init__.py | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/fedpkg.bash b/src/fedpkg.bash index 784abfe..54f94a9 100644 --- a/src/fedpkg.bash +++ b/src/fedpkg.bash @@ -11,8 +11,8 @@ _fedpkg() # define all available commands to complete commands='help build chain-build clean clog clone co commit ci compile \ diff gimmespec giturl import install lint local mockbuild new new-sources \ - patch prep push pull scratch-build sources srpm switch-branch tag tag-request \ - unused-patches update upload verrel' + patch prep push pull retire scratch-build sources srpm switch-branch tag \ + tag-request unused-patches update upload verrel' if [[ $COMP_CWORD -eq 1 ]] ; then if [[ "$cur" == -* ]]; then @@ -89,6 +89,9 @@ _fedpkg() prep) options='--arch' ;; + retire) + options='-p --push -m --mesage' + ;; scratch-build) options='--nowait --background --arches --srpm' ;; diff --git a/src/fedpkg.py b/src/fedpkg.py index d267559..411e128 100755 --- a/src/fedpkg.py +++ b/src/fedpkg.py @@ -448,6 +448,16 @@ def commit(args): if args.push: push(args) +def retire(args): + try: + mymodule = pyfedpkg.PackageModule(args.path) + mymodule.retire(args.message) + except pyfedpkg.FedpkgError, e: + log.error('Could not reitre package: %s' % e) + sys.exit(1) + if args.push: + push(args) + def compile(args): arch = None short = False @@ -950,6 +960,18 @@ packages will be built sequentially. help = 'Alias for commit') parser_ci.set_defaults(command = commit) + # retire stuff + parser_retire = subparsers.add_parser('retire', + help = 'Retire a Fedora package') + parser_retire.add_argument('-m', '--message', + default = None, + help = 'Message describing the reason of retireing') + parser_retire.add_argument('-p', '--push', + default = False, + action = 'store_true', + help = 'Push the retired package to the remote repository') + parser_retire.set_defaults(command = retire) + # compile locally parser_compile = subparsers.add_parser('compile', help = 'Local test rpmbuild compile') diff --git a/src/pyfedpkg/__init__.py b/src/pyfedpkg/__init__.py index f531c07..5da7ede 100644 --- a/src/pyfedpkg/__init__.py +++ b/src/pyfedpkg/__init__.py @@ -953,6 +953,18 @@ class PackageModule: if self.branch.startswith('el5') or self.branch.startswith('el4'): self.hashtype = 'md5' + def _delete(self): + """Delete all files in the directory with exception of ./.git' + """ + for root, dirs, files in os.walk(self.path, topdown=False): + for name in files: + if not '/.git' in root: + os.remove(os.path.join(root, name)) + for name in dirs: + if not (name == '.git' or '/.git' in root): + os.rmdir(os.path.join(root, name)) + return + def tag(self, force=False, clog=False, message=None, file=None, list=None, delete=None): """Managment of git tags @@ -1175,6 +1187,31 @@ class PackageModule: _run_command(cmd, cwd=self.path) return + def retire(self, message=None): + """Retire a Fedora package + """ + + try: + self._delete() + except OSError, e: + raise FedpkgError ('Working tree could not deleted: %s ' % e) + + if message: + msg = message + else: + msg = 'Package %s was retired' % self.module + + fd = open(os.path.join(self.path, 'dead.package'), 'w') + fd.write(msg) + fd.close() + + cmd = ['git', 'add', os.path.join(self.path, 'dead.package')] + _run_command(cmd, cwd=self.path) + + self.commit (msg) + + return + def compile(self, arch=None, short=False): """Run rpm -bc on a module -- cgit