2008-06-27 18:36:36 +02:00
|
|
|
# vim: sw=4 et
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2009-03-02 15:03:06 +01:00
|
|
|
# Copyright (C) 2006 Novell Inc. All rights reserved.
|
2006-04-20 16:26:50 +02:00
|
|
|
# This program is free software; it may be used, copied, modified
|
|
|
|
# and distributed under the terms of the GNU General Public Licence,
|
|
|
|
# either version 2, or (at your option) any later version.
|
|
|
|
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2006-05-10 16:34:59 +02:00
|
|
|
from core import *
|
2007-04-25 01:00:12 +02:00
|
|
|
import cmdln
|
2006-10-10 16:04:34 +02:00
|
|
|
import conf
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
import oscerr
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2009-05-06 15:20:15 +02:00
|
|
|
MAN_HEADER = r""".TH %(ucname)s "1" "%(date)s" "%(name)s %(version)s" "User Commands"
|
|
|
|
.SH NAME
|
2009-06-17 20:19:45 +02:00
|
|
|
%(name)s \- openSUSE build service command-line tool.
|
2009-05-06 15:20:15 +02:00
|
|
|
.SH SYNOPSIS
|
|
|
|
.B %(name)s
|
|
|
|
[\fIGLOBALOPTS\fR] \fISUBCOMMAND \fR[\fIOPTS\fR] [\fIARGS\fR...]
|
|
|
|
.br
|
|
|
|
.B %(name)s
|
|
|
|
\fIhelp SUBCOMMAND\fR
|
|
|
|
.SH DESCRIPTION
|
2009-06-17 20:19:45 +02:00
|
|
|
openSUSE build service command-line tool.
|
2009-05-06 15:20:15 +02:00
|
|
|
"""
|
|
|
|
MAN_FOOTER = r"""
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
Type 'osc help <subcommand>' for more detailed help on a specific subcommand.
|
|
|
|
.PP
|
|
|
|
For additional information, see
|
|
|
|
* http://www.opensuse.org/Build_Service_Tutorial
|
|
|
|
* http://www.opensuse.org/Build_Service/CLI
|
|
|
|
.PP
|
|
|
|
You can modify osc commands, or roll you own, via the plugin API:
|
|
|
|
* http://www.opensuse.org/Build_Service/osc_plugins
|
|
|
|
.SH AUTHOR
|
|
|
|
osc was written by several authors. This man page is automatically generated.
|
|
|
|
"""
|
|
|
|
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
class Osc(cmdln.Cmdln):
|
2009-05-05 16:13:22 +02:00
|
|
|
"""Usage: osc [GLOBALOPTS] SUBCOMMAND [OPTS] [ARGS...]
|
|
|
|
or: osc help SUBCOMMAND
|
|
|
|
|
2009-06-17 20:19:45 +02:00
|
|
|
openSUSE build service command-line tool.
|
2007-04-25 01:00:12 +02:00
|
|
|
Type 'osc help <subcommand>' for help on a specific subcommand.
|
2006-12-12 03:01:39 +01:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${command_list}
|
|
|
|
${help_list}
|
|
|
|
global ${option_list}
|
2009-05-18 16:50:43 +02:00
|
|
|
For additional information, see
|
2007-04-25 01:00:12 +02:00
|
|
|
* http://www.opensuse.org/Build_Service_Tutorial
|
|
|
|
* http://www.opensuse.org/Build_Service/CLI
|
2008-09-24 14:23:56 +02:00
|
|
|
|
|
|
|
You can modify osc commands, or roll you own, via the plugin API:
|
|
|
|
* http://www.opensuse.org/Build_Service/osc_plugins
|
2007-04-25 01:00:12 +02:00
|
|
|
"""
|
|
|
|
name = 'osc'
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
conf = None
|
2006-12-12 03:01:39 +01:00
|
|
|
|
2009-05-06 15:20:15 +02:00
|
|
|
man_header = MAN_HEADER
|
|
|
|
man_footer = MAN_FOOTER
|
2007-05-16 12:55:05 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
cmdln.Cmdln.__init__(self, *args, **kwargs)
|
|
|
|
cmdln.Cmdln.do_help.aliases.append('h')
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2009-05-06 15:20:15 +02:00
|
|
|
def get_version(self):
|
|
|
|
return get_osc_version()
|
2007-05-16 12:55:05 +02:00
|
|
|
|
|
|
|
def get_optparser(self):
|
|
|
|
"""this is the parser for "global" options (not specific to subcommand)"""
|
|
|
|
|
|
|
|
optparser = cmdln.CmdlnOptionParser(self, version=get_osc_version())
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
optparser.add_option('--debugger', action='store_true',
|
|
|
|
help='jump into the debugger before executing anything')
|
|
|
|
optparser.add_option('--post-mortem', action='store_true',
|
|
|
|
help='jump into the debugger in case of errors')
|
|
|
|
optparser.add_option('-t', '--traceback', action='store_true',
|
|
|
|
help='print call trace in case of errors')
|
2007-05-16 12:55:05 +02:00
|
|
|
optparser.add_option('-H', '--http-debug', action='store_true',
|
2007-04-25 01:00:12 +02:00
|
|
|
help='debug HTTP traffic')
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
optparser.add_option('-d', '--debug', action='store_true',
|
|
|
|
help='print info useful for debugging')
|
2009-02-24 00:29:32 +01:00
|
|
|
optparser.add_option('-A', '--apiurl', dest='apiurl',
|
2009-03-31 15:29:16 +02:00
|
|
|
metavar='URL/alias',
|
|
|
|
help='specify URL to access API server at or an alias')
|
2007-08-22 12:18:25 +02:00
|
|
|
optparser.add_option('-c', '--config', dest='conffile',
|
|
|
|
metavar='FILE',
|
|
|
|
help='specify alternate configuration file')
|
2009-05-11 09:46:01 +02:00
|
|
|
optparser.add_option('--no-gnome-keyring', action='store_true',
|
|
|
|
help='disable usage of GNOME Keyring')
|
2007-05-16 12:55:05 +02:00
|
|
|
return optparser
|
2006-05-23 15:48:58 +02:00
|
|
|
|
|
|
|
|
2008-08-20 11:40:00 +02:00
|
|
|
def postoptparse(self, try_again = True):
|
2007-05-16 12:55:05 +02:00
|
|
|
"""merge commandline options into the config"""
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
try:
|
|
|
|
conf.get_config(override_conffile = self.options.conffile,
|
2009-02-24 00:29:32 +01:00
|
|
|
override_apiurl = self.options.apiurl,
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
override_debug = self.options.debug,
|
|
|
|
override_http_debug = self.options.http_debug,
|
|
|
|
override_traceback = self.options.traceback,
|
2009-05-11 09:46:01 +02:00
|
|
|
override_post_mortem = self.options.post_mortem,
|
|
|
|
override_no_gnome_keyring = self.options.no_gnome_keyring)
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
except oscerr.NoConfigfile, e:
|
|
|
|
print >>sys.stderr, e.msg
|
|
|
|
print >>sys.stderr, 'Creating osc configuration file %s ...' % e.file
|
|
|
|
import getpass
|
|
|
|
config = {}
|
|
|
|
config['user'] = raw_input('Username: ')
|
|
|
|
config['pass'] = getpass.getpass()
|
2009-02-24 00:29:32 +01:00
|
|
|
if self.options.apiurl:
|
|
|
|
config['apiurl'] = self.options.apiurl
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
|
2008-08-21 20:17:40 +02:00
|
|
|
conf.write_initial_config(e.file, config)
|
2008-08-07 18:40:55 +02:00
|
|
|
print >>sys.stderr, 'done'
|
2008-08-20 11:40:00 +02:00
|
|
|
if try_again: self.postoptparse(try_again = False)
|
2008-08-07 19:14:26 +02:00
|
|
|
except oscerr.ConfigMissingApiurl, e:
|
|
|
|
print >>sys.stderr, e.msg
|
|
|
|
import getpass
|
|
|
|
user = raw_input('Username: ')
|
|
|
|
passwd = getpass.getpass()
|
2009-05-11 09:46:01 +02:00
|
|
|
conf.add_section(e.file, e.url, user, passwd)
|
2008-08-20 11:40:00 +02:00
|
|
|
if try_again: self.postoptparse(try_again = False)
|
2008-08-07 19:14:26 +02:00
|
|
|
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
self.conf = conf
|
2006-05-23 15:48:58 +02:00
|
|
|
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
|
|
|
|
def get_cmd_help(self, cmdname):
|
|
|
|
doc = self._get_cmd_handler(cmdname).__doc__
|
|
|
|
doc = self._help_reindent(doc)
|
|
|
|
doc = self._help_preprocess(doc, cmdname)
|
|
|
|
doc = doc.rstrip() + '\n' # trim down trailing space
|
|
|
|
return self._str(doc)
|
2006-04-20 16:26:50 +02:00
|
|
|
|
|
|
|
|
2008-08-08 17:19:54 +02:00
|
|
|
def do_init(self, subcmd, opts, project, package=None):
|
2009-05-18 16:50:43 +02:00
|
|
|
"""${cmd_name}: Initialize a directory as working copy
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2008-05-21 18:10:20 +02:00
|
|
|
Initialize an existing directory to be a working copy of an
|
2009-05-18 16:50:43 +02:00
|
|
|
(already existing) buildservice project/package.
|
2008-05-21 18:10:20 +02:00
|
|
|
|
|
|
|
(This is the same as checking out a package and then copying sources
|
|
|
|
into the directory. It does NOT create a new package. To create a
|
|
|
|
package, use 'osc meta pkg ... ...')
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2008-05-21 18:10:20 +02:00
|
|
|
You wouldn't normally use this command.
|
|
|
|
|
|
|
|
To get a working copy of a package (e.g. for building it or working on
|
|
|
|
it, you would normally use the checkout command. Use "osc help
|
|
|
|
checkout" to get help for it.
|
2009-05-18 16:50:43 +02:00
|
|
|
|
|
|
|
usage:
|
2008-08-01 15:58:49 +02:00
|
|
|
osc init PRJ
|
2007-06-21 11:40:47 +02:00
|
|
|
osc init PRJ PAC
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2008-08-08 17:19:54 +02:00
|
|
|
if not package:
|
|
|
|
init_project_dir(conf.config['apiurl'], os.curdir, project)
|
|
|
|
print 'Initializing %s (Project: %s)' % (os.curdir, project)
|
2008-08-01 15:58:49 +02:00
|
|
|
else:
|
2008-08-08 17:19:54 +02:00
|
|
|
init_package_dir(conf.config['apiurl'], project, package, os.path.curdir)
|
|
|
|
print 'Initializing %s (Project: %s, Package: %s)' % (os.curdir, project, package)
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
|
|
|
|
@cmdln.alias('ls')
|
2007-08-16 20:15:08 +02:00
|
|
|
@cmdln.option('-a', '--arch', metavar='ARCH',
|
|
|
|
help='specify architecture')
|
2009-04-09 10:21:12 +02:00
|
|
|
@cmdln.option('-R', '--revision', metavar='REVISION',
|
|
|
|
help='specify revision')
|
2007-08-16 20:15:08 +02:00
|
|
|
@cmdln.option('-r', '--repo', metavar='REPO',
|
|
|
|
help='specify repository')
|
|
|
|
@cmdln.option('-b', '--binaries', action='store_true',
|
|
|
|
help='list built binaries, instead of sources')
|
2007-06-26 15:17:38 +02:00
|
|
|
@cmdln.option('-v', '--verbose', action='store_true',
|
|
|
|
help='print extra information')
|
2009-03-31 00:28:26 +02:00
|
|
|
@cmdln.option('-e', '--expand', action='store_true',
|
|
|
|
help='expand linked package')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_list(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: List existing content on the server
|
|
|
|
|
2007-08-16 20:15:08 +02:00
|
|
|
This command is used to list sources, or binaries (when used with the
|
|
|
|
--binaries option). To use the --binary option, --repo and --arch are
|
|
|
|
also required.
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
Examples:
|
|
|
|
ls # list all projects
|
|
|
|
ls Apache # list packages in a project
|
2007-08-16 20:15:08 +02:00
|
|
|
ls -b Apache # list all binaries of a project
|
|
|
|
ls Apache apache2 # list source files of package of a project
|
2008-11-20 13:56:16 +01:00
|
|
|
ls Apache apache2 <file> # list <file> if this file exists
|
2009-05-18 16:50:43 +02:00
|
|
|
ls -v Apache apache2 # verbosely list source files of package
|
2007-06-26 15:17:38 +02:00
|
|
|
|
|
|
|
With --verbose, the following fields will be shown for each item:
|
|
|
|
MD5 hash of file
|
|
|
|
Revision number of the last commit
|
|
|
|
Size (in bytes)
|
|
|
|
Date and time of the last commit
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
2007-06-26 15:17:38 +02:00
|
|
|
args = slash_split(args)
|
|
|
|
|
2007-08-16 20:15:08 +02:00
|
|
|
if len(args) == 1:
|
2007-04-25 01:00:12 +02:00
|
|
|
project = args[0]
|
2008-11-20 13:56:16 +01:00
|
|
|
elif len(args) == 2 or len(args) == 3:
|
2007-04-25 01:00:12 +02:00
|
|
|
project = args[0]
|
|
|
|
package = args[1]
|
2008-11-20 13:56:16 +01:00
|
|
|
fname = None
|
|
|
|
if len(args) == 3:
|
|
|
|
fname = args[2]
|
|
|
|
elif len(args) > 3:
|
|
|
|
raise oscerr.WrongArgs('Too many arguments')
|
2007-08-16 20:15:08 +02:00
|
|
|
|
|
|
|
if opts.binaries and (not opts.repo or not opts.arch):
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongOptions('Sorry, -r <repo> -a <arch> missing\n'
|
|
|
|
'You can list repositories with: \'osc platforms <project>\'')
|
2009-03-31 00:28:26 +02:00
|
|
|
if opts.binaries and opts.expand:
|
|
|
|
raise oscerr.WrongOptions('Sorry, --binaries and --expand are mutual exclusive.')
|
2007-08-16 20:15:08 +02:00
|
|
|
|
|
|
|
# list binaries
|
|
|
|
if opts.binaries:
|
|
|
|
if not args:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('There are no binaries to list above project level.')
|
2009-04-09 10:21:12 +02:00
|
|
|
if opts.revision:
|
|
|
|
raise oscerr.WrongOptions('Sorry, the --revision option is not supported for binaries.')
|
2007-08-16 20:15:08 +02:00
|
|
|
|
|
|
|
elif len(args) == 1:
|
|
|
|
#if opts.verbose:
|
|
|
|
# sys.exit('The verbose option is not implemented for projects.')
|
|
|
|
r = get_binarylist(conf.config['apiurl'], project, opts.repo, opts.arch)
|
|
|
|
print '\n'.join(r)
|
|
|
|
|
|
|
|
elif len(args) == 2:
|
|
|
|
r = get_binarylist(conf.config['apiurl'], project, opts.repo, opts.arch, package=package)
|
|
|
|
print '\n'.join(r)
|
|
|
|
|
|
|
|
# list sources
|
|
|
|
elif not opts.binaries:
|
|
|
|
if not args:
|
|
|
|
print '\n'.join(meta_get_project_list(conf.config['apiurl']))
|
|
|
|
|
|
|
|
elif len(args) == 1:
|
|
|
|
if opts.verbose:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongOptions('Sorry, the --verbose option is not implemented for projects.')
|
2009-03-31 00:28:26 +02:00
|
|
|
if opts.expand:
|
|
|
|
raise oscerr.WrongOptions('Sorry, the --expand option is not implemented for projects.')
|
2007-08-16 20:15:08 +02:00
|
|
|
|
|
|
|
print '\n'.join(meta_get_packagelist(conf.config['apiurl'], project))
|
|
|
|
|
2008-11-20 13:56:16 +01:00
|
|
|
elif len(args) == 2 or len(args) == 3:
|
2009-05-18 16:50:43 +02:00
|
|
|
l = meta_get_filelist(conf.config['apiurl'],
|
|
|
|
project,
|
2007-08-16 20:15:08 +02:00
|
|
|
package,
|
2009-03-31 00:28:26 +02:00
|
|
|
verbose=opts.verbose,
|
2009-04-09 10:21:12 +02:00
|
|
|
expand=opts.expand,
|
|
|
|
revision=opts.revision)
|
2007-08-16 20:15:08 +02:00
|
|
|
if opts.verbose:
|
2008-11-20 13:56:16 +01:00
|
|
|
out = [ '%s %7d %9d %s %s' % (i.md5, i.rev, i.size, shorttime(i.mtime), i.name) \
|
|
|
|
for i in l if not fname or fname == i.name ]
|
|
|
|
if len(out) == 0:
|
|
|
|
if fname:
|
|
|
|
print 'file \'%s\' does not exist' % fname
|
|
|
|
else:
|
|
|
|
print '\n'.join(out)
|
2007-08-16 20:15:08 +02:00
|
|
|
else:
|
2008-11-20 13:56:16 +01:00
|
|
|
if fname:
|
|
|
|
if fname in l:
|
|
|
|
print fname
|
2009-05-18 16:50:43 +02:00
|
|
|
else:
|
2008-11-20 13:56:16 +01:00
|
|
|
print 'file \'%s\' does not exist' % fname
|
|
|
|
else:
|
|
|
|
print '\n'.join(l)
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
|
2007-07-13 18:01:02 +02:00
|
|
|
@cmdln.option('-F', '--file', metavar='FILE',
|
2007-07-16 12:58:11 +02:00
|
|
|
help='read metadata from FILE, instead of opening an editor. '
|
|
|
|
'\'-\' denotes standard input. ')
|
2007-07-16 18:20:09 +02:00
|
|
|
@cmdln.option('-e', '--edit', action='store_true',
|
|
|
|
help='edit metadata')
|
2007-07-19 14:23:42 +02:00
|
|
|
@cmdln.option('--delete', action='store_true',
|
|
|
|
help='delete a pattern file')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_meta(self, subcmd, opts, *args):
|
2007-07-13 18:01:02 +02:00
|
|
|
"""${cmd_name}: Show meta information, or edit it
|
2006-09-15 12:53:44 +02:00
|
|
|
|
2007-07-19 12:08:42 +02:00
|
|
|
Show or edit build service metadata of type <prj|pkg|prjconf|user|pattern>.
|
2007-07-16 12:58:11 +02:00
|
|
|
|
|
|
|
This command displays metadata on buildservice objects like projects,
|
|
|
|
packages, or users. The type of metadata is specified by the word after
|
|
|
|
"meta", like e.g. "meta prj".
|
|
|
|
|
2007-07-16 15:40:58 +02:00
|
|
|
prj denotes metadata of a buildservice project.
|
|
|
|
prjconf denotes the (build) configuration of a project.
|
|
|
|
pkg denotes metadata of a buildservice package.
|
|
|
|
user denotes the metadata of a user.
|
2007-07-19 12:14:10 +02:00
|
|
|
pattern denotes installation patterns defined for a project.
|
|
|
|
|
|
|
|
To list patterns, use 'osc meta pattern PRJ'. An additional argument
|
|
|
|
will be the pattern file to view or edit.
|
2007-07-16 15:40:58 +02:00
|
|
|
|
2007-07-16 12:58:11 +02:00
|
|
|
With the --edit switch, the metadata can be edited. Per default, osc
|
|
|
|
opens the program specified by the environmental variable EDITOR with a
|
|
|
|
temporary file. Alternatively, content to be saved can be supplied via
|
2007-07-16 18:20:09 +02:00
|
|
|
the --file switch. If the argument is '-', input is taken from stdin:
|
2009-03-02 15:03:06 +01:00
|
|
|
osc meta prjconf home:user | sed ... | osc meta prjconf home:user -F -
|
2007-07-16 12:58:11 +02:00
|
|
|
|
2009-05-27 14:09:50 +02:00
|
|
|
When trying to edit a non-existing resource, it is created implicitly.
|
2006-09-15 12:53:44 +02:00
|
|
|
|
2007-08-09 18:15:13 +02:00
|
|
|
|
|
|
|
Examples:
|
|
|
|
osc meta prj PRJ
|
|
|
|
osc meta pkg PRJ PKG
|
|
|
|
osc meta pkg PRJ PKG -e
|
|
|
|
|
|
|
|
Usage:
|
2007-07-19 12:14:10 +02:00
|
|
|
osc meta <prj|pkg|prjconf|user|pattern> ARGS...
|
2007-08-09 18:15:13 +02:00
|
|
|
osc meta <prj|pkg|prjconf|user|pattern> -e|--edit ARGS...
|
2007-07-19 12:14:10 +02:00
|
|
|
osc meta <prj|pkg|prjconf|user|pattern> -F|--file ARGS...
|
2007-07-19 14:23:42 +02:00
|
|
|
osc meta pattern --delete PRJ PATTERN
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-05-23 17:27:43 +02:00
|
|
|
|
2007-07-13 18:01:02 +02:00
|
|
|
args = slash_split(args)
|
2006-05-23 17:27:43 +02:00
|
|
|
|
2007-07-13 18:01:02 +02:00
|
|
|
if not args or args[0] not in metatypes.keys():
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Unknown meta type. Choose one of %s.' \
|
|
|
|
% ', '.join(metatypes))
|
2006-10-12 15:22:56 +02:00
|
|
|
|
2007-07-13 18:01:02 +02:00
|
|
|
cmd = args[0]
|
|
|
|
del args[0]
|
2007-06-26 15:17:38 +02:00
|
|
|
|
2007-07-19 12:08:42 +02:00
|
|
|
if cmd in ['pkg']:
|
|
|
|
min_args, max_args = 2, 2
|
|
|
|
elif cmd in ['pattern']:
|
|
|
|
min_args, max_args = 1, 2
|
2007-07-13 18:01:02 +02:00
|
|
|
else:
|
2007-07-19 12:08:42 +02:00
|
|
|
min_args, max_args = 1, 1
|
|
|
|
if len(args) < min_args:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Too few arguments.')
|
2007-07-19 12:08:42 +02:00
|
|
|
if len(args) > max_args:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Too many arguments.')
|
2006-10-12 15:22:56 +02:00
|
|
|
|
2007-07-16 18:20:09 +02:00
|
|
|
# specific arguments
|
2007-07-13 18:01:02 +02:00
|
|
|
if cmd == 'prj':
|
2007-04-25 01:00:12 +02:00
|
|
|
project = args[0]
|
2007-07-13 18:01:02 +02:00
|
|
|
elif cmd == 'pkg':
|
|
|
|
project, package = args[0:2]
|
|
|
|
elif cmd == 'prjconf':
|
2007-04-25 01:00:12 +02:00
|
|
|
project = args[0]
|
2007-07-13 18:01:02 +02:00
|
|
|
elif cmd == 'user':
|
2007-04-25 01:00:12 +02:00
|
|
|
user = args[0]
|
2007-07-19 12:08:42 +02:00
|
|
|
elif cmd == 'pattern':
|
|
|
|
project = args[0]
|
|
|
|
if len(args) > 1:
|
|
|
|
pattern = args[1]
|
|
|
|
else:
|
|
|
|
pattern = None
|
2007-07-19 13:54:13 +02:00
|
|
|
# enforce pattern argument if needed
|
|
|
|
if opts.edit or opts.file:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('A pattern file argument is required.')
|
2007-07-16 18:20:09 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
# show
|
2007-07-19 14:23:42 +02:00
|
|
|
if not opts.edit and not opts.file and not opts.delete:
|
2007-07-16 18:20:09 +02:00
|
|
|
if cmd == 'prj':
|
|
|
|
sys.stdout.write(''.join(show_project_meta(conf.config['apiurl'], project)))
|
|
|
|
elif cmd == 'pkg':
|
|
|
|
sys.stdout.write(''.join(show_package_meta(conf.config['apiurl'], project, package)))
|
|
|
|
elif cmd == 'prjconf':
|
|
|
|
sys.stdout.write(''.join(show_project_conf(conf.config['apiurl'], project)))
|
|
|
|
elif cmd == 'user':
|
2007-07-13 18:01:02 +02:00
|
|
|
r = get_user_meta(conf.config['apiurl'], user)
|
|
|
|
if r:
|
|
|
|
sys.stdout.write(''.join(r))
|
2007-07-19 12:08:42 +02:00
|
|
|
elif cmd == 'pattern':
|
|
|
|
if pattern:
|
|
|
|
r = show_pattern_meta(conf.config['apiurl'], project, pattern)
|
|
|
|
if r:
|
|
|
|
sys.stdout.write(''.join(r))
|
|
|
|
else:
|
|
|
|
r = show_pattern_metalist(conf.config['apiurl'], project)
|
|
|
|
if r:
|
|
|
|
sys.stdout.write('\n'.join(r) + '\n')
|
2007-07-16 18:20:09 +02:00
|
|
|
|
|
|
|
# edit
|
|
|
|
if opts.edit and not opts.file:
|
|
|
|
if cmd == 'prj':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='prj',
|
2007-07-16 18:20:09 +02:00
|
|
|
edit=True,
|
|
|
|
path_args=quote_plus(project),
|
2008-03-07 10:13:30 +01:00
|
|
|
template_args=({
|
|
|
|
'name': project,
|
|
|
|
'user': conf.config['user']}))
|
2007-07-16 18:20:09 +02:00
|
|
|
elif cmd == 'pkg':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='pkg',
|
2007-07-16 18:20:09 +02:00
|
|
|
edit=True,
|
|
|
|
path_args=(quote_plus(project), quote_plus(package)),
|
2008-03-07 10:13:30 +01:00
|
|
|
template_args=({
|
|
|
|
'name': package,
|
|
|
|
'user': conf.config['user']}))
|
2007-07-16 18:20:09 +02:00
|
|
|
elif cmd == 'prjconf':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='prjconf',
|
2007-07-16 18:20:09 +02:00
|
|
|
edit=True,
|
|
|
|
path_args=quote_plus(project),
|
|
|
|
template_args=None)
|
|
|
|
elif cmd == 'user':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='user',
|
2007-07-16 18:20:09 +02:00
|
|
|
edit=True,
|
|
|
|
path_args=(quote_plus(user)),
|
2008-03-07 10:13:30 +01:00
|
|
|
template_args=({'user': user}))
|
2007-07-19 12:08:42 +02:00
|
|
|
elif cmd == 'pattern':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='pattern',
|
2007-07-19 12:08:42 +02:00
|
|
|
edit=True,
|
|
|
|
path_args=(project, pattern),
|
|
|
|
template_args=None)
|
2007-07-16 18:20:09 +02:00
|
|
|
|
|
|
|
# upload file
|
|
|
|
if opts.file:
|
|
|
|
|
|
|
|
if opts.file == '-':
|
|
|
|
f = sys.stdin.read()
|
2007-07-13 18:01:02 +02:00
|
|
|
else:
|
2007-07-16 18:20:09 +02:00
|
|
|
try:
|
|
|
|
f = open(opts.file).read()
|
|
|
|
except:
|
|
|
|
sys.exit('could not open file \'%s\'.' % opts.file)
|
|
|
|
|
|
|
|
if cmd == 'prj':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='prj',
|
2007-07-16 18:20:09 +02:00
|
|
|
data=f,
|
|
|
|
edit=opts.edit,
|
|
|
|
path_args=quote_plus(project))
|
|
|
|
elif cmd == 'pkg':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='pkg',
|
2007-07-16 18:20:09 +02:00
|
|
|
data=f,
|
|
|
|
edit=opts.edit,
|
|
|
|
path_args=(quote_plus(project), quote_plus(package)))
|
|
|
|
elif cmd == 'prjconf':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='prjconf',
|
2007-07-16 18:20:09 +02:00
|
|
|
data=f,
|
|
|
|
edit=opts.edit,
|
|
|
|
path_args=quote_plus(project))
|
|
|
|
elif cmd == 'user':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='user',
|
2007-07-16 18:20:09 +02:00
|
|
|
data=f,
|
|
|
|
edit=opts.edit,
|
|
|
|
path_args=(quote_plus(user)))
|
2007-07-19 12:08:42 +02:00
|
|
|
elif cmd == 'pattern':
|
2009-05-18 16:50:43 +02:00
|
|
|
edit_meta(metatype='pattern',
|
2007-07-19 12:08:42 +02:00
|
|
|
data=f,
|
|
|
|
edit=opts.edit,
|
|
|
|
path_args=(project, pattern))
|
2007-07-16 18:20:09 +02:00
|
|
|
|
2007-07-13 18:01:02 +02:00
|
|
|
|
2007-07-19 14:23:42 +02:00
|
|
|
# delete
|
|
|
|
if opts.delete:
|
|
|
|
path = metatypes[cmd]['path']
|
|
|
|
if cmd == 'pattern':
|
|
|
|
path = path % (project, pattern)
|
|
|
|
u = makeurl(conf.config['apiurl'], [path])
|
2008-04-10 23:04:17 +02:00
|
|
|
http_DELETE(u)
|
2007-07-19 14:23:42 +02:00
|
|
|
else:
|
|
|
|
sys.exit('The --delete switch is only for pattern metadata.')
|
|
|
|
|
|
|
|
|
2008-03-05 00:41:00 +01:00
|
|
|
@cmdln.option('-m', '--message', metavar='TEXT',
|
|
|
|
help='specify message TEXT')
|
2008-03-13 00:37:35 +01:00
|
|
|
@cmdln.option('-r', '--revision', metavar='REV',
|
|
|
|
help='for "create", specify a certain source revision ID (the md5 sum)')
|
2008-06-03 17:01:01 +02:00
|
|
|
@cmdln.option('--nodevelproject', action='store_true',
|
|
|
|
help='do not follow a defined devel project ' \
|
|
|
|
'(primary project where a package is developed)')
|
2009-07-13 11:36:19 +02:00
|
|
|
@cmdln.option('-d', '--diff', action='store_true',
|
|
|
|
help='show diff only instead of creating the actual request')
|
2008-07-09 22:38:49 +02:00
|
|
|
@cmdln.alias("sr")
|
2009-06-02 16:57:42 +02:00
|
|
|
@cmdln.alias("submitreq")
|
|
|
|
def do_submitrequest(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Create request to submit source into another Project
|
2008-03-05 00:41:00 +01:00
|
|
|
|
2008-06-06 14:04:34 +02:00
|
|
|
[See http://en.opensuse.org/Build_Service/Collaboration for information
|
|
|
|
on this topic.]
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
See the "request" command for showing and modifing existing requests.
|
2009-06-02 15:14:46 +02:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
usage:
|
2009-07-13 11:36:19 +02:00
|
|
|
osc submitreq [OPTIONS]
|
|
|
|
osc submitreq [OPTIONS] DESTPRJ [DESTPKG]
|
|
|
|
osc submitreq [OPTIONS] SOURCEPRJ SOURCEPKG DESTPRJ [DESTPKG]
|
2009-06-02 16:57:42 +02:00
|
|
|
${cmd_option_list}
|
2009-06-02 15:14:46 +02:00
|
|
|
"""
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
args = slash_split(args)
|
2009-06-02 15:14:46 +02:00
|
|
|
|
2009-06-05 07:46:20 +02:00
|
|
|
# remove this block later again
|
|
|
|
oldcmds = ['create', 'list', 'log', 'show', 'decline', 'accept', 'delete', 'revoke']
|
|
|
|
if args and args[0] in oldcmds:
|
|
|
|
print "****************************************************************"
|
|
|
|
print "* WARNING: It looks that you are using this command with a *"
|
|
|
|
print "* deprecated syntax (maybe) ! *"
|
|
|
|
print "* Please run \"osc sr --help\" to see the new syntax. *"
|
|
|
|
print "****************************************************************"
|
2009-06-05 23:45:29 +02:00
|
|
|
if args[0] == 'create':
|
|
|
|
args.pop(0)
|
|
|
|
else:
|
|
|
|
sys.exit(1)
|
2009-06-05 07:46:20 +02:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
if len(args) > 4:
|
2009-06-02 15:14:46 +02:00
|
|
|
raise oscerr.WrongArgs('Too many arguments.')
|
|
|
|
|
|
|
|
apiurl = conf.config['apiurl']
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
if len(args) <= 2:
|
|
|
|
# try using the working copy at hand
|
|
|
|
p = findpacs(os.curdir)[0]
|
|
|
|
src_project = p.prjname
|
|
|
|
src_package = p.name
|
|
|
|
if len(args) == 0 and p.islink():
|
|
|
|
dst_project = p.linkinfo.project
|
|
|
|
dst_package = p.linkinfo.package
|
|
|
|
apiurl = p.apiurl
|
|
|
|
elif len(args) > 0:
|
|
|
|
dst_project = args[0]
|
|
|
|
if len(args) == 2:
|
|
|
|
dst_package = args[1]
|
2009-06-02 15:14:46 +02:00
|
|
|
else:
|
|
|
|
dst_package = src_package
|
|
|
|
else:
|
2009-06-02 16:57:42 +02:00
|
|
|
sys.exit('Package \'%s\' is not a source link, so I cannot guess the submit target.\n'
|
|
|
|
'Please provide it the target via commandline arguments.' % p.name)
|
|
|
|
|
|
|
|
modified = [i for i in p.filenamelist if p.status(i) != ' ' and p.status(i) != '?']
|
|
|
|
if len(modified) > 0:
|
|
|
|
print 'Your working copy has local modifications.'
|
|
|
|
repl = raw_input('Proceed without committing the local changes? (y|N) ')
|
|
|
|
if repl != 'y':
|
|
|
|
sys.exit(1)
|
|
|
|
elif len(args) >= 3:
|
|
|
|
# get the arguments from the commandline
|
|
|
|
src_project, src_package, dst_project = args[0:3]
|
|
|
|
if len(args) == 4:
|
|
|
|
dst_package = args[3]
|
|
|
|
else:
|
|
|
|
dst_package = src_package
|
|
|
|
else:
|
|
|
|
raise oscerr.WrongArgs('Incorrect number of arguments.\n\n' \
|
|
|
|
+ self.get_cmd_help('request'))
|
|
|
|
|
|
|
|
if not opts.nodevelproject:
|
|
|
|
devloc = None
|
|
|
|
try:
|
|
|
|
devloc = show_develproject(apiurl, dst_project, dst_package)
|
|
|
|
except urllib2.HTTPError:
|
|
|
|
print >>sys.stderr, """\
|
2009-06-02 15:14:46 +02:00
|
|
|
Warning: failed to fetch meta data for '%s' package '%s' (new package?) """ \
|
2009-06-02 16:57:42 +02:00
|
|
|
% (dst_project, dst_package)
|
|
|
|
pass
|
2009-06-02 15:14:46 +02:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
if devloc \
|
|
|
|
and dst_project != devloc \
|
|
|
|
and src_project != devloc:
|
|
|
|
print """\
|
2009-06-02 15:14:46 +02:00
|
|
|
Sorry, but a different project, %s, is defined as the place where development
|
|
|
|
of the package %s primarily takes place.
|
|
|
|
Please submit there instead, or use --nodevelproject to force direct submission.""" \
|
2009-06-02 16:57:42 +02:00
|
|
|
% (devloc, dst_package)
|
|
|
|
sys.exit(1)
|
2009-07-13 11:36:19 +02:00
|
|
|
if opts.diff:
|
|
|
|
print 'old: %s/%s\nnew: %s/%s' %(dst_project, dst_package, src_project, src_package)
|
|
|
|
rdiff = server_diff(apiurl,
|
|
|
|
dst_project, dst_package, None,
|
|
|
|
src_project, src_package, None, True)
|
|
|
|
print rdiff
|
|
|
|
else:
|
|
|
|
reqs = get_request_list(apiurl, dst_project, dst_package, 'submit')
|
|
|
|
user = conf.get_apiurl_usr(apiurl)
|
|
|
|
myreqs = [ i for i in reqs if i.state.who == user ]
|
|
|
|
repl = ''
|
|
|
|
if len(myreqs) > 0:
|
|
|
|
print 'You already created the following submit request: %s.' % \
|
|
|
|
', '.join([str(i.reqid) for i in myreqs ])
|
|
|
|
repl = raw_input('Revoke the old requests? (y/N) ')
|
|
|
|
|
|
|
|
result = create_submit_request(apiurl,
|
|
|
|
src_project, src_package,
|
|
|
|
dst_project, dst_package,
|
|
|
|
opts.message, orev=opts.revision)
|
|
|
|
if repl == 'y':
|
|
|
|
for req in myreqs:
|
|
|
|
change_request_state(apiurl, str(req.reqid), 'revoked',
|
|
|
|
'superseded by %s' % result)
|
|
|
|
|
|
|
|
print 'created request id', result
|
2009-06-02 15:14:46 +02:00
|
|
|
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
@cmdln.option('-m', '--message', metavar='TEXT',
|
|
|
|
help='specify message TEXT')
|
|
|
|
@cmdln.alias("dr")
|
|
|
|
@cmdln.alias("deletereq")
|
|
|
|
def do_deleterequest(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Create request to delete a package or project
|
2009-06-02 15:14:46 +02:00
|
|
|
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
usage:
|
|
|
|
osc deletereq [-m TEXT] PROJECT [PACKAGE]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2009-06-02 15:14:46 +02:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
args = slash_split(args)
|
2009-06-02 15:14:46 +02:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
if len(args) > 2:
|
|
|
|
raise oscerr.WrongArgs('Too many arguments.')
|
2009-06-02 15:14:46 +02:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
apiurl = conf.config['apiurl']
|
2009-06-23 12:06:31 +02:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
project = args[0]
|
|
|
|
package = None
|
|
|
|
if len(args) > 1:
|
|
|
|
package = args[1]
|
|
|
|
result = create_delete_request(apiurl, project, package, opts.message)
|
|
|
|
print result
|
2009-06-02 15:14:46 +02:00
|
|
|
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
@cmdln.option('-m', '--message', metavar='TEXT',
|
|
|
|
help='specify message TEXT')
|
|
|
|
@cmdln.alias("cr")
|
|
|
|
@cmdln.alias("changedevelreq")
|
|
|
|
def do_changedevelrequest(self, subcmd, opts, *args):
|
2009-07-23 10:01:31 +02:00
|
|
|
"""${cmd_name}: Create request to change the devel package definition.
|
2009-06-02 15:14:46 +02:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
[See http://en.opensuse.org/Build_Service/Collaboration for information
|
|
|
|
on this topic.]
|
|
|
|
|
|
|
|
See the "request" command for showing and modifing existing requests.
|
|
|
|
|
|
|
|
osc changedevelrequest PROJECT PACKAGE DEVEL_PROJECT [DEVEL_PACKAGE]
|
|
|
|
"""
|
|
|
|
|
|
|
|
if len(args) > 4:
|
|
|
|
raise oscerr.WrongArgs('Too many arguments.')
|
|
|
|
if len(args) < 3:
|
|
|
|
raise oscerr.WrongArgs('Too few arguments.')
|
|
|
|
|
|
|
|
apiurl = conf.config['apiurl']
|
|
|
|
|
|
|
|
devel_project = args[2]
|
|
|
|
project = args[0]
|
|
|
|
package = args[1]
|
|
|
|
devel_package = package
|
|
|
|
if len(args) > 3:
|
|
|
|
devel_package = args[3]
|
|
|
|
result = create_change_devel_request(apiurl,
|
|
|
|
devel_project, devel_package,
|
|
|
|
project, package,
|
|
|
|
opts.message)
|
|
|
|
print result
|
2009-06-02 15:14:46 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@cmdln.option('-d', '--diff', action='store_true',
|
|
|
|
help='generate a diff')
|
|
|
|
@cmdln.option('-u', '--unified', action='store_true',
|
|
|
|
help='output the diff in the unified diff format')
|
|
|
|
@cmdln.option('-m', '--message', metavar='TEXT',
|
|
|
|
help='specify message TEXT')
|
2009-06-18 15:49:23 +02:00
|
|
|
@cmdln.option('-t', '--type', metavar='TEXT',
|
2009-06-19 15:10:33 +02:00
|
|
|
help='limit to requests which contain a given action type (submit/delete/change_devel)')
|
2009-06-02 15:14:46 +02:00
|
|
|
@cmdln.option('-s', '--state', default='new',
|
2009-07-07 16:15:39 +02:00
|
|
|
help='only list requests in one of the comma separated given states (new/accepted/rejected/revoked/declined) [default=new]')
|
2009-06-02 15:14:46 +02:00
|
|
|
@cmdln.option('-b', '--brief', action='store_true', default=False,
|
|
|
|
help='print output in list view as list subcommand')
|
|
|
|
@cmdln.option('-M', '--mine', action='store_true',
|
|
|
|
help='only show requests created by yourself')
|
|
|
|
@cmdln.alias("rq")
|
2009-06-04 17:20:25 +02:00
|
|
|
# may support it later, but lets fail for people used the api call before
|
|
|
|
# @cmdln.alias("req")
|
2009-06-02 15:14:46 +02:00
|
|
|
def do_request(self, subcmd, opts, *args):
|
2009-06-23 12:06:31 +02:00
|
|
|
"""${cmd_name}: Show and modify requests
|
2009-06-02 15:14:46 +02:00
|
|
|
|
|
|
|
[See http://en.opensuse.org/Build_Service/Collaboration for information
|
|
|
|
on this topic.]
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
This command shows and modifies existing requests. To create new requests
|
|
|
|
you need to call one of the following:
|
|
|
|
osc submitrequest
|
|
|
|
osc deleterequest
|
|
|
|
osc changedevelrequest
|
|
|
|
|
|
|
|
This command has the following sub commands:
|
2008-03-05 00:41:00 +01:00
|
|
|
|
|
|
|
"list" lists open requests attached to a project or package.
|
|
|
|
|
2008-08-19 16:18:05 +02:00
|
|
|
"log" will show the history of the given ID
|
|
|
|
|
2008-03-06 11:25:45 +01:00
|
|
|
"show" will show the request itself, and generate a diff for review, if
|
|
|
|
used with the --diff option.
|
2008-03-05 00:41:00 +01:00
|
|
|
|
2008-03-13 00:37:35 +01:00
|
|
|
"decline" will change the request state to "declined" and append a
|
|
|
|
message that you specify with the --message option.
|
2008-03-05 00:41:00 +01:00
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
"wipe" will permanently delete a request.
|
2008-07-25 11:34:29 +02:00
|
|
|
|
|
|
|
"revoke" will set the request state to "revoked" and append a
|
2008-07-09 17:22:18 +02:00
|
|
|
message that you specify with the --message option.
|
|
|
|
|
2008-03-13 00:37:35 +01:00
|
|
|
"accept" will change the request state to "accepted" and will trigger
|
|
|
|
the actual submit process. That would normally be a server-side copy of
|
|
|
|
the source package to the target package.
|
2008-03-05 00:41:00 +01:00
|
|
|
|
2008-03-13 00:37:35 +01:00
|
|
|
|
|
|
|
usage:
|
2009-07-07 16:15:39 +02:00
|
|
|
osc request list [-M] [-s state] [-t type] [PRJ [PKG]]
|
2009-06-02 15:14:46 +02:00
|
|
|
osc request log ID
|
|
|
|
osc request show [-d] [-b] ID
|
|
|
|
osc request accept [-m TEXT] ID
|
|
|
|
osc request decline [-m TEXT] ID
|
|
|
|
osc request revoke [-m TEXT] ID
|
2009-06-02 16:57:42 +02:00
|
|
|
osc request wipe ID
|
2008-03-05 00:41:00 +01:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
args = slash_split(args)
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
cmds = ['list', 'log', 'show', 'decline', 'accept', 'wipe', 'revoke']
|
2008-03-05 00:41:00 +01:00
|
|
|
if not args or args[0] not in cmds:
|
2009-06-02 15:14:46 +02:00
|
|
|
raise oscerr.WrongArgs('Unknown request action. Choose one of %s.' \
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
% ', '.join(cmds))
|
2008-03-05 00:41:00 +01:00
|
|
|
|
|
|
|
cmd = args[0]
|
|
|
|
del args[0]
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
if cmd in ['wipe']:
|
|
|
|
min_args, max_args = 1, 1
|
2008-03-05 00:41:00 +01:00
|
|
|
elif cmd in ['list']:
|
2008-06-24 11:37:49 +02:00
|
|
|
min_args, max_args = 0, 2
|
2008-03-05 00:41:00 +01:00
|
|
|
else:
|
|
|
|
min_args, max_args = 1, 1
|
|
|
|
if len(args) < min_args:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Too few arguments.')
|
2008-03-05 00:41:00 +01:00
|
|
|
if len(args) > max_args:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Too many arguments.')
|
2008-03-05 00:41:00 +01:00
|
|
|
|
2008-06-06 14:04:34 +02:00
|
|
|
apiurl = conf.config['apiurl']
|
|
|
|
|
2009-06-02 16:57:42 +02:00
|
|
|
if cmd == 'list':
|
2008-06-24 11:37:49 +02:00
|
|
|
package = None
|
|
|
|
project = None
|
|
|
|
if len(args) > 0:
|
|
|
|
project = args[0]
|
2009-05-15 17:32:15 +02:00
|
|
|
elif not opts.mine:
|
|
|
|
try:
|
2009-07-24 21:15:51 +02:00
|
|
|
project = store_read_project(os.curdir)
|
|
|
|
apiurl = store_read_apiurl(os.curdir)
|
2009-05-15 17:32:15 +02:00
|
|
|
package = store_read_package(os.curdir)
|
|
|
|
except oscerr.NoWorkingCopy:
|
|
|
|
pass
|
2008-06-24 11:37:49 +02:00
|
|
|
|
2008-03-05 00:41:00 +01:00
|
|
|
if len(args) > 1:
|
|
|
|
package = args[1]
|
2009-06-02 16:57:42 +02:00
|
|
|
elif cmd in ['log', 'show', 'decline', 'accept', 'wipe', 'revoke']:
|
2008-03-05 00:41:00 +01:00
|
|
|
reqid = args[0]
|
|
|
|
|
|
|
|
|
|
|
|
# list
|
2009-06-02 16:57:42 +02:00
|
|
|
if cmd == 'list':
|
2008-08-04 15:20:29 +02:00
|
|
|
state_list = opts.state.split(',')
|
2009-05-17 15:07:55 +02:00
|
|
|
who = ''
|
|
|
|
if opts.mine:
|
|
|
|
who = conf.get_apiurl_usr(apiurl)
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-06-02 15:14:46 +02:00
|
|
|
results = get_request_list(apiurl,
|
2009-06-18 15:49:23 +02:00
|
|
|
project, package, who, state_list, opts.type)
|
2008-06-27 18:36:36 +02:00
|
|
|
|
|
|
|
results.sort(reverse=True)
|
|
|
|
|
2008-03-05 00:41:00 +01:00
|
|
|
for result in results:
|
|
|
|
print result.list_view()
|
|
|
|
|
2008-08-19 16:18:05 +02:00
|
|
|
elif cmd == 'log':
|
2009-06-02 15:14:46 +02:00
|
|
|
for l in get_request_log(conf.config['apiurl'], reqid):
|
2008-08-19 16:18:05 +02:00
|
|
|
print l
|
|
|
|
|
|
|
|
|
2008-03-05 00:41:00 +01:00
|
|
|
# show
|
|
|
|
elif cmd == 'show':
|
2009-06-02 15:14:46 +02:00
|
|
|
r = get_request(conf.config['apiurl'], reqid)
|
2009-04-22 13:02:32 +02:00
|
|
|
if opts.brief:
|
|
|
|
print r.list_view()
|
|
|
|
else:
|
|
|
|
print r
|
2008-03-05 00:41:00 +01:00
|
|
|
# fixme: will inevitably fail if the given target doesn't exist
|
2008-03-06 11:25:45 +01:00
|
|
|
if opts.diff:
|
2008-03-20 21:11:30 +01:00
|
|
|
try:
|
2009-01-16 15:43:45 +01:00
|
|
|
print server_diff(conf.config['apiurl'],
|
2009-06-02 15:14:46 +02:00
|
|
|
r.actions[0].dst_project, r.actions[0].dst_package, None,
|
|
|
|
r.actions[0].src_project, r.actions[0].src_package, r.actions[0].src_rev, opts.unified)
|
2008-03-20 21:11:30 +01:00
|
|
|
except urllib2.HTTPError, e:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
e.osc_msg = 'Diff not possible'
|
|
|
|
raise
|
2008-03-05 00:41:00 +01:00
|
|
|
|
|
|
|
|
2008-03-06 11:25:45 +01:00
|
|
|
# decline
|
|
|
|
elif cmd == 'decline':
|
2009-06-02 15:14:46 +02:00
|
|
|
r = change_request_state(conf.config['apiurl'],
|
2008-03-06 11:25:45 +01:00
|
|
|
reqid, 'declined', opts.message or '')
|
|
|
|
print r
|
2008-03-05 00:41:00 +01:00
|
|
|
# accept
|
|
|
|
elif cmd == 'accept':
|
2009-06-02 15:14:46 +02:00
|
|
|
r = change_request_state(conf.config['apiurl'],
|
2008-03-12 19:22:11 +01:00
|
|
|
reqid, 'accepted', opts.message or '')
|
|
|
|
print r
|
2009-06-02 16:57:42 +02:00
|
|
|
# delete/wipe
|
|
|
|
elif cmd == 'wipe':
|
|
|
|
r = change_request_state(conf.config['apiurl'],
|
|
|
|
reqid, 'deleted', opts.message or '')
|
|
|
|
print r
|
2008-07-25 11:34:29 +02:00
|
|
|
# revoke
|
|
|
|
elif cmd == 'revoke':
|
2009-06-02 15:14:46 +02:00
|
|
|
r = change_request_state(conf.config['apiurl'],
|
2008-07-25 11:34:29 +02:00
|
|
|
reqid, 'revoked', opts.message or '')
|
|
|
|
print r
|
2008-03-05 00:41:00 +01:00
|
|
|
|
2007-07-16 18:20:09 +02:00
|
|
|
# editmeta and its aliases are all depracated
|
|
|
|
@cmdln.alias("editprj")
|
|
|
|
@cmdln.alias("createprj")
|
|
|
|
@cmdln.alias("editpac")
|
|
|
|
@cmdln.alias("createpac")
|
|
|
|
@cmdln.alias("edituser")
|
|
|
|
@cmdln.alias("usermeta")
|
2009-06-02 15:14:46 +02:00
|
|
|
@cmdln.hide(1)
|
2007-07-16 18:20:09 +02:00
|
|
|
def do_editmeta(self, subcmd, opts, *args):
|
2009-05-18 16:50:43 +02:00
|
|
|
"""${cmd_name}:
|
|
|
|
|
2007-07-16 18:20:09 +02:00
|
|
|
Obsolete command to edit metadata. Use 'meta' now.
|
|
|
|
|
|
|
|
See the help output of 'meta'.
|
2007-07-13 18:01:02 +02:00
|
|
|
|
2007-07-16 18:20:09 +02:00
|
|
|
"""
|
2007-07-13 18:01:02 +02:00
|
|
|
|
2007-07-16 18:20:09 +02:00
|
|
|
print >>sys.stderr, 'This command is obsolete. Use \'osc meta <metatype> ...\'.'
|
|
|
|
print >>sys.stderr, 'See \'osc help meta\'.'
|
|
|
|
#self.do_help([None, 'meta'])
|
|
|
|
return 2
|
2007-07-13 18:01:02 +02:00
|
|
|
|
|
|
|
|
2009-04-09 10:21:12 +02:00
|
|
|
@cmdln.option('-r', '--revision', metavar='rev',
|
|
|
|
help='use the specified revision.')
|
2009-06-18 11:18:17 +02:00
|
|
|
@cmdln.option('-u', '--unset', action='store_true',
|
|
|
|
help='remove revision in link, it will point always to latest revision')
|
2009-04-09 10:21:12 +02:00
|
|
|
def do_setlinkrev(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Updates a revision number in a source link.
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-04-09 10:21:12 +02:00
|
|
|
This command adds or updates a specified revision number in a source link.
|
|
|
|
The current revision of the source is used, if no revision number is specified.
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2009-04-09 10:21:12 +02:00
|
|
|
osc setlinkrev
|
2009-06-18 11:18:17 +02:00
|
|
|
osc setlinkrev PROJECT [PACKAGE]
|
2009-04-09 10:21:12 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
args = slash_split(args)
|
2009-04-09 13:44:32 +02:00
|
|
|
apiurl = conf.config['apiurl']
|
2009-06-18 11:18:17 +02:00
|
|
|
package = None
|
2009-04-09 10:21:12 +02:00
|
|
|
if not args or len(args) == 0:
|
|
|
|
p = findpacs(os.curdir)[0]
|
|
|
|
project = p.prjname
|
|
|
|
package = p.name
|
2009-04-09 13:44:32 +02:00
|
|
|
apiurl = p.apiurl
|
|
|
|
if not p.islink():
|
2009-04-16 10:13:55 +02:00
|
|
|
sys.exit('Local directory is no checked out source link package, aborting')
|
2009-04-09 10:21:12 +02:00
|
|
|
elif len(args) == 2:
|
|
|
|
project = args[0]
|
|
|
|
package = args[1]
|
2009-06-18 11:18:17 +02:00
|
|
|
elif len(args) == 1:
|
|
|
|
project = args[0]
|
2009-04-09 10:21:12 +02:00
|
|
|
else:
|
|
|
|
raise oscerr.WrongArgs('Incorrect number of arguments.\n\n' \
|
|
|
|
+ self.get_cmd_help('setlinkrev'))
|
|
|
|
|
2009-06-18 11:18:17 +02:00
|
|
|
if package:
|
|
|
|
packages = [ package ]
|
|
|
|
else:
|
|
|
|
packages = meta_get_packagelist(apiurl, project)
|
|
|
|
|
|
|
|
for p in packages:
|
|
|
|
print "setting revision for package", p
|
|
|
|
if opts.unset:
|
|
|
|
rev=-1
|
|
|
|
else:
|
|
|
|
rev, dummy = parseRevisionOption(opts.revision)
|
|
|
|
set_link_rev(apiurl, project, p, rev)
|
2009-04-09 10:21:12 +02:00
|
|
|
|
|
|
|
|
2009-05-13 09:59:01 +02:00
|
|
|
@cmdln.option('-C', '--cicount', choices=['add', 'copy', 'local'],
|
|
|
|
help='cicount attribute in the link, known values are add, copy, and local, default in buildservice is currently add.')
|
2009-06-18 11:18:17 +02:00
|
|
|
@cmdln.option('-c', '--current', action='store_true',
|
|
|
|
help='link fixed against current revision.')
|
2008-06-26 12:47:58 +02:00
|
|
|
@cmdln.option('-r', '--revision', metavar='rev',
|
|
|
|
help='link the specified revision.')
|
2009-06-15 17:19:16 +02:00
|
|
|
@cmdln.option('-f', '--force', action='store_true',
|
|
|
|
help='overwrite an existing link file if it is there.')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_linkpac(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: "Link" a package to another package
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
A linked package is a clone of another package, but plus local
|
|
|
|
modifications. It can be cross-project.
|
2006-08-07 12:08:54 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
The DESTPAC name is optional; the source packages' name will be used if
|
|
|
|
DESTPAC is omitted.
|
2006-08-07 12:08:54 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
Afterwards, you will want to 'checkout DESTPRJ DESTPAC'.
|
2006-08-07 12:08:54 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
To add a patch, add the patch as file and add it to the _link file.
|
|
|
|
You can also specify text which will be inserted at the top of the spec file.
|
2006-08-07 12:08:54 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
See the examples in the _link file.
|
2006-08-07 12:08:54 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc linkpac SOURCEPRJ SOURCEPAC DESTPRJ [DESTPAC]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-08-07 12:08:54 +02:00
|
|
|
|
2007-06-26 15:17:38 +02:00
|
|
|
args = slash_split(args)
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if not args or len(args) < 3:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Incorrect number of arguments.\n\n' \
|
|
|
|
+ self.get_cmd_help('linkpac'))
|
2006-08-07 12:08:54 +02:00
|
|
|
|
2008-06-26 12:47:58 +02:00
|
|
|
rev, dummy = parseRevisionOption(opts.revision)
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
src_project = args[0]
|
|
|
|
src_package = args[1]
|
|
|
|
dst_project = args[2]
|
|
|
|
if len(args) > 3:
|
|
|
|
dst_package = args[3]
|
|
|
|
else:
|
|
|
|
dst_package = src_package
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if src_project == dst_project and src_package == dst_package:
|
2007-04-25 23:10:49 +02:00
|
|
|
print >>sys.stderr, 'Error: source and destination are the same.'
|
|
|
|
return 1
|
2008-06-26 12:47:58 +02:00
|
|
|
|
2009-04-08 13:48:34 +02:00
|
|
|
if opts.current:
|
|
|
|
rev = show_upstream_rev(conf.config['apiurl'], src_project, src_package);
|
|
|
|
|
2008-06-26 12:47:58 +02:00
|
|
|
if rev and not checkRevision(src_project, src_package, rev):
|
|
|
|
print >>sys.stderr, 'Revision \'%s\' does not exist' % rev
|
|
|
|
sys.exit(1)
|
|
|
|
|
2009-06-15 17:19:16 +02:00
|
|
|
link_pac(src_project, src_package, dst_project, dst_package, opts.force, rev, opts.cicount)
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2007-10-30 14:45:54 +01:00
|
|
|
def do_aggregatepac(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: "Aggregate" a package to another package
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2008-07-17 19:46:21 +02:00
|
|
|
Aggregation of a package means that the build results (binaries) of a
|
|
|
|
package are basically copied into another project.
|
|
|
|
This can be used to make packages available from building that are
|
|
|
|
needed in a project but available only in a different project. Note
|
2009-05-18 16:50:43 +02:00
|
|
|
that this is done at the expense of disk space. See
|
2008-07-17 19:46:21 +02:00
|
|
|
http://en.opensuse.org/Build_Service/Tips_and_Tricks#_link_and__aggregate
|
|
|
|
for more information.
|
|
|
|
|
2007-10-30 14:45:54 +01:00
|
|
|
The DESTPAC name is optional; the source packages' name will be used if
|
|
|
|
DESTPAC is omitted.
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-10-30 14:45:54 +01:00
|
|
|
osc aggregatepac SOURCEPRJ SOURCEPAC DESTPRJ [DESTPAC]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
args = slash_split(args)
|
|
|
|
|
|
|
|
if not args or len(args) < 3:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Incorrect number of arguments.\n\n' \
|
|
|
|
+ self.get_cmd_help('aggregatepac'))
|
2007-10-30 14:45:54 +01:00
|
|
|
|
|
|
|
src_project = args[0]
|
|
|
|
src_package = args[1]
|
|
|
|
dst_project = args[2]
|
|
|
|
if len(args) > 3:
|
|
|
|
dst_package = args[3]
|
|
|
|
else:
|
|
|
|
dst_package = src_package
|
|
|
|
|
|
|
|
if src_project == dst_project and src_package == dst_package:
|
|
|
|
print >>sys.stderr, 'Error: source and destination are the same.'
|
|
|
|
return 1
|
|
|
|
aggregate_pac(src_project, src_package, dst_project, dst_package)
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2008-05-21 17:49:00 +02:00
|
|
|
|
2008-04-02 16:36:23 +02:00
|
|
|
@cmdln.option('-c', '--client-side-copy', action='store_true',
|
|
|
|
help='do a (slower) client-side copy')
|
2008-04-30 14:28:25 +02:00
|
|
|
@cmdln.option('-k', '--keep-maintainers', action='store_true',
|
|
|
|
help='keep original maintainers. Default is remove all and replace with the one calling the script.')
|
2009-03-11 16:23:23 +01:00
|
|
|
@cmdln.option('-d', '--keep-develproject', action='store_true',
|
|
|
|
help='keep develproject tag in the package metadata')
|
2009-05-14 13:50:53 +02:00
|
|
|
@cmdln.option('-r', '--revision', metavar='rev',
|
|
|
|
help='link the specified revision.')
|
2007-05-04 23:51:54 +02:00
|
|
|
@cmdln.option('-t', '--to-apiurl', metavar='URL',
|
|
|
|
help='URL of destination api server. Default is the source api server.')
|
2009-05-14 13:50:53 +02:00
|
|
|
@cmdln.option('-m', '--message', metavar='TEXT',
|
|
|
|
help='specify message TEXT')
|
2009-03-31 00:17:18 +02:00
|
|
|
@cmdln.option('-e', '--expand', action='store_true',
|
|
|
|
help='if the source package is a link then copy the expanded version of the link')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_copypac(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Copy a package
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
A way to copy package to somewhere else.
|
|
|
|
|
2008-04-02 16:36:23 +02:00
|
|
|
It can be done across buildservice instances, if the -t option is used.
|
|
|
|
In that case, a client-side copy is implied.
|
|
|
|
|
|
|
|
Using --client-side-copy always involves downloading all files, and
|
|
|
|
uploading them to the target.
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
The DESTPAC name is optional; the source packages' name will be used if
|
|
|
|
DESTPAC is omitted.
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc copypac SOURCEPRJ SOURCEPAC DESTPRJ [DESTPAC]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2007-06-26 15:17:38 +02:00
|
|
|
args = slash_split(args)
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if not args or len(args) < 3:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Incorrect number of arguments.\n\n' \
|
|
|
|
+ self.get_cmd_help('copypac'))
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
src_project = args[0]
|
|
|
|
src_package = args[1]
|
|
|
|
dst_project = args[2]
|
|
|
|
if len(args) > 3:
|
|
|
|
dst_package = args[3]
|
|
|
|
else:
|
|
|
|
dst_package = src_package
|
2006-09-21 16:33:24 +02:00
|
|
|
|
2007-05-04 23:51:54 +02:00
|
|
|
src_apiurl = conf.config['apiurl']
|
|
|
|
if opts.to_apiurl:
|
|
|
|
dst_apiurl = opts.to_apiurl
|
|
|
|
else:
|
|
|
|
dst_apiurl = src_apiurl
|
|
|
|
|
|
|
|
if src_project == dst_project and \
|
|
|
|
src_package == dst_package and \
|
|
|
|
src_apiurl == dst_apiurl:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Source and destination are the same.')
|
2008-03-17 22:46:42 +01:00
|
|
|
|
2008-04-02 16:36:23 +02:00
|
|
|
if src_apiurl != dst_apiurl:
|
|
|
|
opts.client_side_copy = True
|
2008-03-17 22:46:42 +01:00
|
|
|
|
2009-05-14 13:50:53 +02:00
|
|
|
rev, dummy = parseRevisionOption(opts.revision)
|
|
|
|
|
|
|
|
if opts.message:
|
2009-07-15 20:53:47 +02:00
|
|
|
comment = opts.message
|
|
|
|
else:
|
|
|
|
if not rev:
|
2009-05-14 13:50:53 +02:00
|
|
|
rev = show_upstream_rev(src_apiurl, src_project, src_package);
|
2009-07-15 20:53:47 +02:00
|
|
|
comment = 'osc copypac from project:%s package:%s revision:%s' % ( src_project, src_package, rev )
|
2009-05-14 13:50:53 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
r = copy_pac(src_apiurl, src_project, src_package,
|
2008-03-17 22:46:42 +01:00
|
|
|
dst_apiurl, dst_project, dst_package,
|
2008-04-30 14:28:25 +02:00
|
|
|
client_side_copy=opts.client_side_copy,
|
2009-03-11 16:23:23 +01:00
|
|
|
keep_maintainers=opts.keep_maintainers,
|
2009-03-31 00:17:18 +02:00
|
|
|
keep_develproject=opts.keep_develproject,
|
2009-05-14 13:50:53 +02:00
|
|
|
expand=opts.expand,
|
|
|
|
revision=rev,
|
|
|
|
comment=comment)
|
2008-03-17 22:46:42 +01:00
|
|
|
print r
|
2006-08-11 12:37:29 +02:00
|
|
|
|
|
|
|
|
2008-06-03 15:16:55 +02:00
|
|
|
@cmdln.option('--nodevelproject', action='store_true',
|
|
|
|
help='do not follow a defined devel project ' \
|
|
|
|
'(primary project where a package is developed)')
|
2009-04-17 14:02:02 +02:00
|
|
|
@cmdln.option('-c', '--checkout', action='store_true',
|
|
|
|
help='Checkout branched package afterwards ' )
|
2009-02-10 16:49:34 +01:00
|
|
|
@cmdln.option('-r', '--revision', metavar='rev',
|
|
|
|
help='branch against a specific revision')
|
2008-10-16 14:34:41 +02:00
|
|
|
def do_branch(self, subcmd, opts, *args):
|
2008-05-21 17:49:00 +02:00
|
|
|
"""${cmd_name}: Branch a package
|
|
|
|
|
2008-06-06 14:04:34 +02:00
|
|
|
[See http://en.opensuse.org/Build_Service/Collaboration for information
|
|
|
|
on this topic.]
|
|
|
|
|
2008-05-21 17:49:00 +02:00
|
|
|
Create a source link from a package of an existing project to a new
|
|
|
|
subproject of the requesters home project (home:branches:)
|
|
|
|
|
|
|
|
The branched package will live in
|
|
|
|
home:USERNAME:branches:PROJECT/PACKAGE
|
2009-04-17 14:02:02 +02:00
|
|
|
if nothing else specified.
|
2009-05-18 16:50:43 +02:00
|
|
|
|
|
|
|
usage:
|
2009-04-17 14:02:02 +02:00
|
|
|
osc branch SOURCEPROJECT SOURCEPACKAGE
|
|
|
|
osc branch SOURCEPROJECT SOURCEPACKAGE TARGETPROJECT
|
|
|
|
osc branch SOURCEPROJECT SOURCEPACKAGE TARGETPROJECT TARGETPACKAGE
|
2008-05-21 17:49:00 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
2008-10-16 14:34:41 +02:00
|
|
|
args = slash_split(args)
|
2009-04-17 14:02:02 +02:00
|
|
|
tproject = tpackage = None
|
|
|
|
if not (len(args) >= 2 and len(args) <= 4):
|
2008-10-16 14:34:41 +02:00
|
|
|
raise oscerr.WrongArgs('Wrong number of arguments.')
|
2009-04-17 14:02:02 +02:00
|
|
|
if len(args) >= 3:
|
|
|
|
tproject = args[2]
|
|
|
|
if len(args) >= 4:
|
|
|
|
tpackage = args[3]
|
2008-10-16 14:34:41 +02:00
|
|
|
|
2009-02-10 16:49:34 +01:00
|
|
|
r = branch_pkg(conf.config['apiurl'], args[0], args[1],
|
2009-04-17 14:02:02 +02:00
|
|
|
nodevelproject=opts.nodevelproject, rev=opts.revision, target_project=tproject, target_package=tpackage)
|
2008-05-21 17:49:00 +02:00
|
|
|
|
2008-10-16 14:34:41 +02:00
|
|
|
expected = 'home:%s:branches:%s' % (conf.config['user'], args[0])
|
2009-04-17 14:04:45 +02:00
|
|
|
if r != expected:
|
2009-05-21 11:13:34 +02:00
|
|
|
devloc = r
|
|
|
|
if 'branches:' in r:
|
|
|
|
devloc = r.split('branches:')[1]
|
2008-06-03 15:16:55 +02:00
|
|
|
print '\nNote: The branch has been created of a different project,\n' \
|
|
|
|
' %s,\n' \
|
|
|
|
' which is the primary location of where development for\n' \
|
|
|
|
' that package takes place.\n' \
|
|
|
|
' That\'s also where you would normally make changes against.\n' \
|
|
|
|
' A direct branch of the specified package can be forced\n' \
|
|
|
|
' with the --nodevelproject option.\n' % devloc
|
2009-04-17 14:02:02 +02:00
|
|
|
|
|
|
|
package = args[1]
|
|
|
|
if tpackage:
|
|
|
|
package = tpackage
|
|
|
|
if opts.checkout:
|
|
|
|
checkout_package(conf.config['apiurl'], r, package,
|
|
|
|
expand_link=True, prj_dir=r)
|
|
|
|
else:
|
|
|
|
apiopt = ''
|
|
|
|
if conf.get_configParser().get('general', 'apiurl') != conf.config['apiurl']:
|
|
|
|
apiopt = '-A %s ' % conf.config['apiurl']
|
|
|
|
print 'A working copy of the branched package can be checked out with:\n\n' \
|
|
|
|
'osc %sco %s/%s' \
|
|
|
|
% (apiopt, r, package)
|
2008-05-21 17:49:00 +02:00
|
|
|
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2006-08-11 12:37:29 +02:00
|
|
|
|
2007-10-14 01:15:49 +02:00
|
|
|
@cmdln.option('-f', '--force', action='store_true',
|
|
|
|
help='deletes a project and its packages')
|
2009-05-04 21:07:05 +02:00
|
|
|
def do_rdelete(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Delete a project or packages on the server.
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2007-10-14 01:15:49 +02:00
|
|
|
As a safety measure, project must be empty (i.e., you need to delete all
|
|
|
|
packages first). If you are sure that you want to remove this project and all
|
|
|
|
its packages use \'--force\' switch.
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2009-05-04 21:07:05 +02:00
|
|
|
usage:
|
|
|
|
osc rdelete -f PROJECT
|
|
|
|
osc rdelete PROJECT PACKAGE [PACKAGE ...]
|
2007-05-08 10:59:10 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2009-05-04 21:07:05 +02:00
|
|
|
args = slash_split(args)
|
2009-05-07 21:41:02 +02:00
|
|
|
if len(args) < 1:
|
|
|
|
raise oscerr.WrongArgs('Missing argument.')
|
2009-05-04 21:07:05 +02:00
|
|
|
prj = args[0]
|
|
|
|
pkgs = args[1:]
|
|
|
|
|
|
|
|
if pkgs:
|
|
|
|
for pkg in pkgs:
|
|
|
|
# careful: if pkg is an empty string, the package delete request results
|
|
|
|
# into a project delete request - which works recursively...
|
|
|
|
if pkg:
|
|
|
|
delete_package(conf.config['apiurl'], prj, pkg)
|
2009-05-06 12:08:08 +02:00
|
|
|
elif len(meta_get_packagelist(conf.config['apiurl'], prj)) >= 1 and not opts.force:
|
2007-10-14 01:15:49 +02:00
|
|
|
print >>sys.stderr, 'Project contains packages. It must be empty before deleting it. ' \
|
|
|
|
'If you are sure that you want to remove this project and all its ' \
|
|
|
|
'packages use the \'--force\' switch'
|
|
|
|
sys.exit(1)
|
|
|
|
else:
|
2009-05-04 21:07:05 +02:00
|
|
|
delete_project(conf.config['apiurl'], prj)
|
|
|
|
|
|
|
|
@cmdln.hide(1)
|
|
|
|
def do_deletepac(self, subcmd, opts, *args):
|
2009-05-11 15:21:33 +02:00
|
|
|
print """${cmd_name} is obsolete !
|
|
|
|
|
|
|
|
Please use either
|
2009-05-04 21:07:05 +02:00
|
|
|
osc delete for checked out packages or projects
|
|
|
|
or
|
|
|
|
osc rdelete for server side operations."""
|
|
|
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
@cmdln.hide(1)
|
|
|
|
@cmdln.option('-f', '--force', action='store_true',
|
|
|
|
help='deletes a project and its packages')
|
|
|
|
def do_deleteprj(self, subcmd, opts, project):
|
|
|
|
"""${cmd_name} is obsolete !
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2009-05-04 21:07:05 +02:00
|
|
|
Please use
|
|
|
|
osc rdelete PROJECT
|
|
|
|
"""
|
|
|
|
sys.exit(1)
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2008-08-08 17:23:03 +02:00
|
|
|
@cmdln.alias('metafromspec')
|
2007-06-30 17:39:47 +02:00
|
|
|
@cmdln.option('', '--specfile', metavar='FILE',
|
|
|
|
help='Path to specfile. (if you pass more than working copy this option is ignored)')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_updatepacmetafromspec(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Update package meta information from a specfile
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
ARG, if specified, is a package working copy.
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-05-31 14:13:26 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
args = parseargs(args)
|
2007-06-30 17:39:47 +02:00
|
|
|
if opts.specfile and (len(args) == 1):
|
|
|
|
specfile = opts.specfile
|
|
|
|
else:
|
|
|
|
specfile = None
|
2007-04-25 01:00:12 +02:00
|
|
|
pacs = findpacs(args)
|
|
|
|
for p in pacs:
|
2007-06-30 17:39:47 +02:00
|
|
|
p.read_meta_from_spec(specfile)
|
2007-07-16 15:40:58 +02:00
|
|
|
p.update_package_meta()
|
2006-05-31 14:13:26 +02:00
|
|
|
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.alias('di')
|
2009-05-18 16:50:43 +02:00
|
|
|
@cmdln.option('-c', '--change', metavar='rev',
|
|
|
|
help='the change made by revision rev (like -r rev-1:rev).'
|
|
|
|
'If rev is negative this is like -r rev:rev-1.')
|
2007-07-04 14:55:26 +02:00
|
|
|
@cmdln.option('-r', '--revision', metavar='rev1[:rev2]',
|
|
|
|
help='If rev1 is specified it will compare your working copy against '
|
|
|
|
'the revision (rev1) on the server. '
|
2009-01-09 18:09:29 +01:00
|
|
|
'If rev1 and rev2 are specified it will compare rev1 against rev2 '
|
2009-01-16 15:45:27 +01:00
|
|
|
'(NOTE: changes in your working copy are ignored in this case)')
|
2009-01-16 15:43:45 +01:00
|
|
|
@cmdln.option('-p', '--pretty', action='store_true',
|
|
|
|
help='output the diff in the pretty diff format')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_diff(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Generates a diff
|
2006-05-31 14:13:26 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
Generates a diff, comparing local changes against the repository
|
|
|
|
server.
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
ARG, specified, is a filename to include in the diff.
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
args = parseargs(args)
|
|
|
|
pacs = findpacs(args)
|
2009-05-18 16:50:43 +02:00
|
|
|
|
|
|
|
if opts.change:
|
|
|
|
try:
|
|
|
|
rev = int(opts.change)
|
|
|
|
if rev > 0:
|
|
|
|
rev1 = rev - 1
|
|
|
|
rev2 = rev
|
|
|
|
elif rev < 0:
|
|
|
|
rev1 = -rev
|
|
|
|
rev2 = -rev - 1
|
|
|
|
else:
|
|
|
|
return
|
|
|
|
except:
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
rev1, rev2 = parseRevisionOption(opts.revision)
|
2007-11-26 19:13:51 +01:00
|
|
|
diff = ''
|
|
|
|
for pac in pacs:
|
2009-01-09 18:09:29 +01:00
|
|
|
if not rev2:
|
|
|
|
diff += ''.join(make_diff(pac, rev1))
|
|
|
|
else:
|
2009-01-16 15:43:45 +01:00
|
|
|
diff += server_diff(pac.apiurl, pac.prjname, pac.name, rev1,
|
2009-02-04 21:51:25 +01:00
|
|
|
pac.prjname, pac.name, rev2, not opts.pretty)
|
2007-11-26 19:13:51 +01:00
|
|
|
if len(diff) > 0:
|
|
|
|
print diff
|
2007-07-04 14:55:26 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
|
2007-11-29 18:22:57 +01:00
|
|
|
@cmdln.option('--oldprj', metavar='OLDPRJ',
|
2007-11-29 18:32:52 +01:00
|
|
|
help='project to compare against')
|
2007-11-29 18:22:57 +01:00
|
|
|
@cmdln.option('--oldpkg', metavar='OLDPKG',
|
2007-11-29 18:32:52 +01:00
|
|
|
help='package to compare against')
|
2007-11-29 18:22:57 +01:00
|
|
|
@cmdln.option('-r', '--revision', metavar='N[:M]',
|
|
|
|
help='revision id, where N = old revision and M = new revision')
|
2009-01-16 15:43:45 +01:00
|
|
|
@cmdln.option('-u', '--unified', action='store_true',
|
|
|
|
help='output the diff in the unified diff format')
|
2007-11-29 18:22:57 +01:00
|
|
|
def do_rdiff(self, subcmd, opts, new_project, new_package):
|
2007-12-10 15:23:58 +01:00
|
|
|
"""${cmd_name}: Server-side "pretty" diff of two packages
|
2007-11-29 18:22:57 +01:00
|
|
|
|
2007-11-29 18:32:52 +01:00
|
|
|
If neither OLDPRJ nor OLDPKG are specified, the diff is against the
|
|
|
|
last revision, thus showing the latest change.
|
|
|
|
|
2009-07-27 22:03:01 +02:00
|
|
|
Note that this command doesn't return a normal diff (which could be
|
|
|
|
applied as patch), but a "pretty" diff, which also compares the content
|
|
|
|
of tarballs.
|
2007-11-29 18:32:52 +01:00
|
|
|
|
2007-11-29 18:22:57 +01:00
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
old_revision = None
|
|
|
|
new_revision = None
|
|
|
|
if opts.revision:
|
|
|
|
old_revision, new_revision = parseRevisionOption(opts.revision)
|
|
|
|
|
2009-01-16 15:43:45 +01:00
|
|
|
rdiff = server_diff(conf.config['apiurl'],
|
2007-11-29 18:22:57 +01:00
|
|
|
opts.oldprj, opts.oldpkg, old_revision,
|
2009-01-16 15:43:45 +01:00
|
|
|
new_project, new_package, new_revision, opts.unified)
|
2007-11-29 18:22:57 +01:00
|
|
|
|
|
|
|
print rdiff
|
|
|
|
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_repourls(self, subcmd, opts, *args):
|
2009-05-18 16:50:43 +02:00
|
|
|
"""${cmd_name}: Shows URLs of .repo files
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
Shows URLs on which to access the project .repos files (yum-style
|
2007-07-16 11:45:17 +02:00
|
|
|
metadata) on download.opensuse.org.
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
ARG, if specified, is a package working copy.
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
args = parseargs(args)
|
|
|
|
pacs = findpacs(args)
|
2007-03-12 16:46:15 +01:00
|
|
|
|
2007-07-16 11:45:17 +02:00
|
|
|
url_tmpl = 'http://download.opensuse.org/repositories/%s/%s/%s.repo'
|
2007-04-25 01:00:12 +02:00
|
|
|
for p in pacs:
|
2007-05-04 23:51:54 +02:00
|
|
|
platforms = get_platforms_of_project(p.apiurl, p.prjname)
|
2007-04-25 01:00:12 +02:00
|
|
|
for platform in platforms:
|
|
|
|
print url_tmpl % (p.prjname.replace(':', ':/'), platform, p.prjname)
|
2006-05-23 15:48:58 +02:00
|
|
|
|
|
|
|
|
2007-07-04 14:55:26 +02:00
|
|
|
|
|
|
|
@cmdln.option('-r', '--revision', metavar='rev',
|
2007-07-04 15:48:24 +02:00
|
|
|
help='checkout the specified revision. '
|
|
|
|
'NOTE: if you checkout the complete project '
|
|
|
|
'this option is ignored!')
|
2008-03-24 21:24:49 +01:00
|
|
|
@cmdln.option('-e', '--expand-link', action='store_true',
|
2009-05-18 16:50:43 +02:00
|
|
|
help='if a package is a link, check out the expanded '
|
2008-06-06 14:04:34 +02:00
|
|
|
'sources (no-op, since this became the default)')
|
|
|
|
@cmdln.option('-u', '--unexpand-link', action='store_true',
|
|
|
|
help='if a package is a link, check out the _link file ' \
|
|
|
|
'instead of the expanded sources')
|
2009-04-16 19:41:47 +02:00
|
|
|
@cmdln.option('-c', '--current-dir', action='store_true',
|
|
|
|
help='place PACKAGE folder in the current directory' \
|
|
|
|
'instead of a PROJECT/PACKAGE directory')
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.alias('co')
|
|
|
|
def do_checkout(self, subcmd, opts, *args):
|
2007-12-10 15:23:58 +01:00
|
|
|
"""${cmd_name}: Check out content from the repository
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
Check out content from the repository server, creating a local working
|
|
|
|
copy.
|
|
|
|
|
2008-03-24 21:24:49 +01:00
|
|
|
When checking out a single package, the option --revision can be used
|
2009-05-27 14:09:50 +02:00
|
|
|
to specify a revision of the package to be checked out.
|
2008-03-24 21:24:49 +01:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
When a package is a source link, then it will be checked out in
|
|
|
|
expanded form. If --unexpand-link option is used, the checkout will
|
2008-06-06 14:04:34 +02:00
|
|
|
instead produce the raw _link file plus patches.
|
2007-04-25 01:00:12 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc co PROJECT [PACKAGE] [FILE]
|
2009-04-17 10:39:04 +02:00
|
|
|
osc co PROJECT # entire project
|
|
|
|
osc co PROJECT PACKAGE # a package
|
|
|
|
osc co PROJECT PACKAGE FILE # single file -> to current dir
|
|
|
|
|
2009-04-24 01:59:40 +02:00
|
|
|
while inside a project directory:
|
|
|
|
osc co PACKAGE # check out PACKAGE from project
|
2009-04-17 10:39:04 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2008-06-06 14:04:34 +02:00
|
|
|
|
|
|
|
if opts.unexpand_link: expand_link = False
|
|
|
|
else: expand_link = True
|
|
|
|
|
2007-06-26 15:17:38 +02:00
|
|
|
args = slash_split(args)
|
2007-04-25 01:00:12 +02:00
|
|
|
project = package = filename = None
|
2009-04-17 10:39:04 +02:00
|
|
|
apiurl = conf.config['apiurl']
|
2009-05-18 16:50:43 +02:00
|
|
|
try:
|
2009-04-17 10:39:04 +02:00
|
|
|
project = project_dir = args[0]
|
2007-04-25 01:00:12 +02:00
|
|
|
package = args[1]
|
|
|
|
filename = args[2]
|
2009-05-18 16:50:43 +02:00
|
|
|
except:
|
2007-04-25 01:00:12 +02:00
|
|
|
pass
|
|
|
|
|
2009-04-17 10:39:04 +02:00
|
|
|
if args and len(args) == 1:
|
2009-04-17 10:48:22 +02:00
|
|
|
localdir = os.getcwd()
|
|
|
|
if is_project_dir(localdir):
|
2009-04-17 14:02:02 +02:00
|
|
|
project = Project(localdir).name
|
2009-04-17 10:48:22 +02:00
|
|
|
project_dir = localdir
|
2009-04-17 10:39:04 +02:00
|
|
|
package = args[0]
|
2009-04-17 10:48:22 +02:00
|
|
|
apiurl = Project(localdir).apiurl
|
2008-06-06 14:04:34 +02:00
|
|
|
|
2007-07-04 14:55:26 +02:00
|
|
|
rev, dummy = parseRevisionOption(opts.revision)
|
|
|
|
|
2007-07-07 19:13:37 +02:00
|
|
|
if rev and not checkRevision(project, package, rev):
|
2007-07-06 13:54:34 +02:00
|
|
|
print >>sys.stderr, 'Revision \'%s\' does not exist' % rev
|
|
|
|
sys.exit(1)
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if filename:
|
2009-04-17 10:39:04 +02:00
|
|
|
get_source_file(apiurl, project, package, filename, revision=rev)
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
elif package:
|
2009-04-24 01:57:59 +02:00
|
|
|
if opts.current_dir: project_dir = None
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
checkout_package(apiurl, project, package,
|
2009-04-17 10:39:04 +02:00
|
|
|
rev, expand_link=expand_link, prj_dir=project_dir)
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
elif project:
|
2009-05-15 13:40:50 +02:00
|
|
|
prj_dir = project
|
|
|
|
if sys.platform[:3] == 'win':
|
|
|
|
prj_dir = prj_dir.replace(':', ';')
|
|
|
|
if os.path.exists(prj_dir):
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
sys.exit('osc: project \'%s\' already exists' % project)
|
|
|
|
|
|
|
|
# check if the project does exist (show_project_meta will throw an exception)
|
2009-04-17 10:39:04 +02:00
|
|
|
show_project_meta(apiurl, project)
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
|
2009-05-15 13:40:50 +02:00
|
|
|
init_project_dir(apiurl, prj_dir, project)
|
|
|
|
print statfrmt('A', prj_dir)
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
# all packages
|
2009-04-17 10:39:04 +02:00
|
|
|
for package in meta_get_packagelist(apiurl, project):
|
2008-10-02 17:46:52 +02:00
|
|
|
try:
|
2009-05-18 16:50:43 +02:00
|
|
|
checkout_package(apiurl, project, package,
|
2009-05-15 13:40:50 +02:00
|
|
|
expand_link = expand_link, prj_dir = prj_dir)
|
2008-10-02 17:46:52 +02:00
|
|
|
except oscerr.LinkExpandError, e:
|
|
|
|
print >>sys.stderr, 'Link cannot be expanded:\n', e
|
2009-04-22 14:32:29 +02:00
|
|
|
print >>sys.stderr, 'Use "osc repairlink" for fixing merge conflicts:\n'
|
2008-10-02 17:46:52 +02:00
|
|
|
# check out in unexpanded form at least
|
2009-05-18 16:50:43 +02:00
|
|
|
checkout_package(apiurl, project, package,
|
2009-05-15 13:40:50 +02:00
|
|
|
expand_link = False, prj_dir = prj_dir)
|
2008-10-02 17:46:52 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
else:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Missing argument.\n\n' \
|
|
|
|
+ self.get_cmd_help('checkout'))
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
|
2008-05-21 15:44:49 +02:00
|
|
|
@cmdln.option('-q', '--quiet', action='store_true',
|
|
|
|
help='print as little as possible')
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.option('-v', '--verbose', action='store_true',
|
|
|
|
help='print extra information')
|
|
|
|
@cmdln.alias('st')
|
|
|
|
def do_status(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Show status of files in working copy
|
|
|
|
|
|
|
|
Show the status of files in a local working copy, indicating whether
|
|
|
|
files have been changed locally, deleted, added, ...
|
|
|
|
|
|
|
|
The first column in the output specifies the status and is one of the
|
|
|
|
following characters:
|
|
|
|
' ' no modifications
|
|
|
|
'A' Added
|
|
|
|
'C' Conflicted
|
|
|
|
'D' Deleted
|
|
|
|
'M' Modified
|
|
|
|
'?' item is not under version control
|
2009-07-15 23:16:34 +02:00
|
|
|
'!' item is missing (removed by non-osc command) or incomplete
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
examples:
|
|
|
|
osc st
|
|
|
|
osc st <directory>
|
|
|
|
osc st file1 file2 ...
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc status [OPTS] [PATH...]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
args = parseargs(args)
|
|
|
|
|
2008-04-23 23:51:24 +02:00
|
|
|
# storage for single Package() objects
|
2007-04-25 01:00:12 +02:00
|
|
|
pacpaths = []
|
2008-04-23 23:51:24 +02:00
|
|
|
# storage for a project dir ( { prj_instance : [ package objects ] } )
|
|
|
|
prjpacs = {}
|
2007-04-25 01:00:12 +02:00
|
|
|
for arg in args:
|
|
|
|
# when 'status' is run inside a project dir, it should
|
|
|
|
# stat all packages existing in the wc
|
|
|
|
if is_project_dir(arg):
|
2008-03-10 19:04:23 +01:00
|
|
|
prj = Project(arg, False)
|
|
|
|
|
|
|
|
if conf.config['do_package_tracking']:
|
2008-04-23 23:51:24 +02:00
|
|
|
prjpacs[prj] = []
|
2008-03-10 19:04:23 +01:00
|
|
|
for pac in prj.pacs_have:
|
|
|
|
# we cannot create package objects if the dir does not exist
|
|
|
|
if not pac in prj.pacs_broken:
|
2008-04-23 23:51:24 +02:00
|
|
|
prjpacs[prj].append(os.path.join(arg, pac))
|
2008-03-10 19:04:23 +01:00
|
|
|
else:
|
|
|
|
pacpaths += [arg + '/' + n for n in prj.pacs_have]
|
2007-04-25 01:00:12 +02:00
|
|
|
elif is_package_dir(arg):
|
|
|
|
pacpaths.append(arg)
|
|
|
|
elif os.path.isfile(arg):
|
|
|
|
pacpaths.append(arg)
|
|
|
|
else:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
msg = '\'%s\' is neither a project or a package directory' % arg
|
|
|
|
raise oscerr.NoWorkingCopy, msg
|
2008-03-10 19:04:23 +01:00
|
|
|
lines = []
|
2008-04-23 23:51:24 +02:00
|
|
|
# process single packages
|
2008-05-21 15:44:49 +02:00
|
|
|
lines = getStatus(findpacs(pacpaths), None, opts.verbose, opts.quiet)
|
2008-04-23 23:51:24 +02:00
|
|
|
# process project dirs
|
|
|
|
for prj, pacs in prjpacs.iteritems():
|
2008-05-21 15:44:49 +02:00
|
|
|
lines += getStatus(findpacs(pacs), prj, opts.verbose, opts.quiet)
|
2008-03-10 19:04:23 +01:00
|
|
|
if lines:
|
|
|
|
print '\n'.join(lines)
|
2006-06-02 16:00:58 +02:00
|
|
|
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_add(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Mark files to be added upon the next commit
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc add FILE [FILE...]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
if not args:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Missing argument.\n\n' \
|
|
|
|
+ self.get_cmd_help('add'))
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
filenames = parseargs(args)
|
2008-03-10 19:04:23 +01:00
|
|
|
addFiles(filenames)
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
def do_mkpac(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Create a new package under version control
|
2006-09-29 15:15:41 +02:00
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
usage:
|
|
|
|
osc mkpac new_package
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2008-03-18 00:43:32 +01:00
|
|
|
if not conf.config['do_package_tracking']:
|
2008-12-17 23:45:58 +01:00
|
|
|
print >>sys.stderr, "to use this feature you have to enable \'do_package_tracking\' " \
|
|
|
|
"in the [general] section in the configuration file"
|
2008-03-18 00:43:32 +01:00
|
|
|
sys.exit(1)
|
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
if len(args) != 1:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Wrong number of arguments.')
|
|
|
|
|
2008-03-15 23:51:37 +01:00
|
|
|
createPackageDir(args[0])
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2008-08-20 21:24:55 +02:00
|
|
|
@cmdln.option('-r', '--recursive', action='store_true',
|
|
|
|
help='If CWD is a project dir then scan all package dirs as well')
|
2009-05-11 15:21:33 +02:00
|
|
|
@cmdln.alias('ar')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_addremove(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Adds new files, removes disappeared files
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
Adds all files new in the local copy, and removes all disappeared files.
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
ARG, if specified, is a package working copy.
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-05-11 09:27:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
args = parseargs(args)
|
2008-08-20 21:24:55 +02:00
|
|
|
arg_list = args[:]
|
|
|
|
for arg in arg_list:
|
2009-03-16 22:29:42 +01:00
|
|
|
if is_project_dir(arg) and conf.config['do_package_tracking']:
|
2008-08-20 21:24:55 +02:00
|
|
|
prj = Project(arg, False)
|
|
|
|
for pac in prj.pacs_unvers:
|
|
|
|
pac_dir = getTransActPath(os.path.join(prj.dir, pac))
|
|
|
|
if os.path.isdir(pac_dir):
|
|
|
|
addFiles([pac_dir], prj)
|
|
|
|
for pac in prj.pacs_broken:
|
|
|
|
if prj.get_state(pac) != 'D':
|
|
|
|
prj.set_state(pac, 'D')
|
|
|
|
print statfrmt('D', getTransActPath(os.path.join(prj.dir, pac)))
|
|
|
|
if opts.recursive:
|
|
|
|
for pac in prj.pacs_have:
|
|
|
|
state = prj.get_state(pac)
|
|
|
|
if state != None and state != 'D':
|
|
|
|
pac_dir = getTransActPath(os.path.join(prj.dir, pac))
|
|
|
|
args.append(pac_dir)
|
|
|
|
args.remove(arg)
|
|
|
|
prj.write_packages()
|
2009-03-16 22:29:42 +01:00
|
|
|
elif is_project_dir(arg):
|
|
|
|
print >>sys.stderr, 'osc: addremove is not supported in a project dir unless ' \
|
|
|
|
'\'do_package_tracking\' is enabled in the configuration file'
|
|
|
|
sys.exit(1)
|
2008-08-20 21:24:55 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
pacs = findpacs(args)
|
|
|
|
for p in pacs:
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
p.todo = p.filenamelist + p.filenamelist_unvers
|
|
|
|
|
|
|
|
for filename in p.todo:
|
|
|
|
if os.path.isdir(filename):
|
|
|
|
continue
|
2007-07-06 13:20:30 +02:00
|
|
|
# ignore foo.rXX, foo.mine for files which are in 'C' state
|
|
|
|
if os.path.splitext(filename)[0] in p.in_conflict:
|
|
|
|
continue
|
2007-04-25 01:00:12 +02:00
|
|
|
state = p.status(filename)
|
|
|
|
if state == '?':
|
|
|
|
p.addfile(filename)
|
2008-08-20 21:24:55 +02:00
|
|
|
print statfrmt('A', getTransActPath(os.path.join(p.dir, filename)))
|
2007-04-25 01:00:12 +02:00
|
|
|
elif state == '!':
|
|
|
|
p.put_on_deletelist(filename)
|
|
|
|
p.write_deletelist()
|
|
|
|
os.unlink(os.path.join(p.storedir, filename))
|
2008-08-20 21:24:55 +02:00
|
|
|
print statfrmt('D', getTransActPath(os.path.join(p.dir, filename)))
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@cmdln.alias('ci')
|
|
|
|
@cmdln.alias('checkin')
|
2007-07-12 01:24:26 +02:00
|
|
|
@cmdln.option('-m', '--message', metavar='TEXT',
|
|
|
|
help='specify log message TEXT')
|
2007-07-13 12:02:35 +02:00
|
|
|
@cmdln.option('-F', '--file', metavar='FILE',
|
|
|
|
help='read log message from FILE')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_commit(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Upload content to the repository server
|
|
|
|
|
|
|
|
Upload content which is changed in your working copy, to the repository
|
|
|
|
server.
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
examples:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc ci # current dir
|
|
|
|
osc ci <dir>
|
|
|
|
osc ci file1 file2 ...
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2008-05-21 15:44:49 +02:00
|
|
|
|
|
|
|
args = parseargs(args)
|
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
msg = ''
|
|
|
|
if opts.message:
|
|
|
|
msg = opts.message
|
|
|
|
elif opts.file:
|
|
|
|
try:
|
|
|
|
msg = open(opts.file).read()
|
|
|
|
except:
|
|
|
|
sys.exit('could not open file \'%s\'.' % opts.file)
|
2007-04-25 01:00:12 +02:00
|
|
|
|
2008-08-20 21:24:55 +02:00
|
|
|
arg_list = args[:]
|
|
|
|
for arg in arg_list:
|
2008-03-10 19:04:23 +01:00
|
|
|
if conf.config['do_package_tracking'] and is_project_dir(arg):
|
|
|
|
Project(arg).commit(msg=msg)
|
|
|
|
args.remove(arg)
|
2007-04-25 01:00:12 +02:00
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
pacs = findpacs(args)
|
2008-05-21 15:44:49 +02:00
|
|
|
|
|
|
|
if not msg:
|
|
|
|
# open editor for commit message
|
|
|
|
# but first, produce status and diff to append to the template
|
|
|
|
footer = diffs = []
|
2009-04-16 15:48:37 +02:00
|
|
|
template = []
|
2008-05-21 15:44:49 +02:00
|
|
|
for pac in pacs:
|
|
|
|
changed = getStatus([pac], quiet=True)
|
|
|
|
if changed:
|
|
|
|
footer += changed
|
|
|
|
diffs += ['\nDiff for working copy: %s' % pac.dir]
|
|
|
|
diffs += make_diff(pac, 0)
|
2009-04-16 15:48:37 +02:00
|
|
|
template.extend(get_commit_message_template(pac))
|
2008-05-21 15:44:49 +02:00
|
|
|
# if footer is empty, there is nothing to commit, and no edit needed.
|
|
|
|
if footer:
|
2009-04-16 15:48:37 +02:00
|
|
|
msg = edit_message(footer='\n'.join(footer), template='\n'.join(template))
|
2008-05-21 15:44:49 +02:00
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
if conf.config['do_package_tracking'] and len(pacs) > 0:
|
|
|
|
prj_paths = {}
|
|
|
|
single_paths = []
|
|
|
|
files = {}
|
|
|
|
# it is possible to commit packages from different projects at the same
|
|
|
|
# time: iterate over all pacs and put each pac to the right project in the dict
|
|
|
|
for pac in pacs:
|
|
|
|
path = os.path.normpath(os.path.join(pac.dir, os.pardir))
|
|
|
|
if is_project_dir(path):
|
|
|
|
pac_path = os.path.basename(os.path.normpath(pac.absdir))
|
|
|
|
prj_paths.setdefault(path, []).append(pac_path)
|
|
|
|
files[pac_path] = pac.todo
|
|
|
|
else:
|
|
|
|
single_paths.append(pac.dir)
|
|
|
|
for prj, packages in prj_paths.iteritems():
|
|
|
|
Project(prj).commit(tuple(packages), msg, files)
|
|
|
|
for pac in single_paths:
|
|
|
|
Package(pac).commit(msg)
|
|
|
|
else:
|
|
|
|
for p in pacs:
|
|
|
|
p.commit(msg)
|
2006-05-11 09:27:50 +02:00
|
|
|
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2008-03-24 21:24:49 +01:00
|
|
|
@cmdln.option('-r', '--revision', metavar='REV',
|
2007-07-04 14:55:26 +02:00
|
|
|
help='update to specified revision (this option will be ignored '
|
|
|
|
'if you are going to update the complete project or more than '
|
|
|
|
'one package)')
|
2008-03-24 21:24:49 +01:00
|
|
|
@cmdln.option('-u', '--unexpand-link', action='store_true',
|
|
|
|
help='if a package is an expanded link, update to the raw _link file')
|
|
|
|
@cmdln.option('-e', '--expand-link', action='store_true',
|
|
|
|
help='if a package is a link, update to the expanded sources')
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.alias('up')
|
|
|
|
def do_update(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Update a working copy
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
examples:
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
1. osc up
|
|
|
|
If the current working directory is a package, update it.
|
|
|
|
If the directory is a project directory, update all contained
|
|
|
|
packages, AND check out newly added packages.
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
To update only checked out packages, without checking out new
|
|
|
|
ones, you might want to use "osc up *" from within the project
|
|
|
|
dir.
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
2. osc up PAC
|
|
|
|
Update the packages specified by the path argument(s)
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2008-03-24 21:24:49 +01:00
|
|
|
When --expand-link is used with source link packages, the expanded
|
|
|
|
sources will be checked out. Without this option, the _link file and
|
|
|
|
patches will be checked out. The option --unexpand-link can be used to
|
|
|
|
switch back to the "raw" source with a _link file plus patch(es).
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
args = parseargs(args)
|
2008-08-20 21:24:55 +02:00
|
|
|
arg_list = args[:]
|
2006-04-24 14:04:20 +02:00
|
|
|
|
2008-08-20 21:24:55 +02:00
|
|
|
for arg in arg_list:
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if is_project_dir(arg):
|
|
|
|
prj = Project(arg)
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
if conf.config['do_package_tracking']:
|
2009-05-18 16:50:43 +02:00
|
|
|
prj.update(expand_link=opts.expand_link,
|
2008-03-24 21:24:49 +01:00
|
|
|
unexpand_link=opts.unexpand_link)
|
2008-03-10 19:04:23 +01:00
|
|
|
args.remove(arg)
|
2009-05-18 16:50:43 +02:00
|
|
|
else:
|
|
|
|
# if not tracking package, and 'update' is run inside a project dir,
|
2008-03-10 19:04:23 +01:00
|
|
|
# it should do the following:
|
|
|
|
# (a) update all packages
|
|
|
|
args += prj.pacs_have
|
|
|
|
# (b) fetch new packages
|
|
|
|
prj.checkout_missing_pacs()
|
|
|
|
args.remove(arg)
|
2006-06-06 12:50:40 +02:00
|
|
|
|
2009-06-09 11:34:25 +02:00
|
|
|
args.sort()
|
2007-04-25 01:00:12 +02:00
|
|
|
pacs = findpacs(args)
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2008-03-24 21:24:49 +01:00
|
|
|
if (opts.expand_link and opts.unexpand_link) \
|
|
|
|
or (opts.expand_link and opts.revision) \
|
|
|
|
or (opts.unexpand_link and opts.revision):
|
2009-05-18 16:50:43 +02:00
|
|
|
raise oscerr.WrongOptions('Sorry, the options --expand-link, --unexpand-link and '
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
'--revision are mutually exclusive.')
|
2008-03-24 21:24:49 +01:00
|
|
|
|
2007-07-04 14:55:26 +02:00
|
|
|
if opts.revision and ( len(args) == 1):
|
|
|
|
rev, dummy = parseRevisionOption(opts.revision)
|
2008-02-18 14:44:20 +01:00
|
|
|
if not checkRevision(pacs[0].prjname, pacs[0].name, rev, pacs[0].apiurl):
|
2007-07-06 13:54:34 +02:00
|
|
|
print >>sys.stderr, 'Revision \'%s\' does not exist' % rev
|
|
|
|
sys.exit(1)
|
2007-07-04 14:55:26 +02:00
|
|
|
else:
|
|
|
|
rev = None
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
for p in pacs:
|
|
|
|
if len(pacs) > 1:
|
|
|
|
print 'Updating %s' % p.name
|
2008-03-24 21:24:49 +01:00
|
|
|
|
2009-04-21 18:52:26 +02:00
|
|
|
if opts.expand_link and p.haslinkerror() and not p.islinkrepair():
|
2009-05-15 21:08:14 +02:00
|
|
|
raise oscerr.LinkExpandError(p.prjname, p.name, p.linkerror())
|
2009-04-06 22:08:14 +02:00
|
|
|
|
2008-11-19 13:13:18 +01:00
|
|
|
if not rev:
|
|
|
|
if opts.expand_link and p.islink() and not p.isexpanded():
|
|
|
|
print 'Expanding to rev', p.linkinfo.xsrcmd5
|
|
|
|
rev = p.linkinfo.xsrcmd5
|
|
|
|
elif opts.unexpand_link and p.islink() and p.isexpanded():
|
|
|
|
print 'Unexpanding to rev', p.linkinfo.lsrcmd5
|
|
|
|
rev = p.linkinfo.lsrcmd5
|
|
|
|
elif p.islink() and p.isexpanded():
|
2009-04-21 18:52:26 +02:00
|
|
|
rev = p.latest_rev()
|
2008-03-24 21:24:49 +01:00
|
|
|
|
2008-07-04 14:54:02 +02:00
|
|
|
# FIXME: ugly workaround for #399247
|
|
|
|
if opts.expand_link or opts.unexpand_link:
|
2009-04-22 15:14:17 +02:00
|
|
|
if [ i for i in p.filenamelist+p.filenamelist_unvers if p.status(i) != ' ' and p.status(i) != '?']:
|
2008-07-04 14:54:02 +02:00
|
|
|
print >>sys.stderr, 'osc: cannot expand/unexpand because your working ' \
|
|
|
|
'copy has local modifications. Please remove them ' \
|
|
|
|
'and try again'
|
|
|
|
sys.exit(1)
|
2008-03-10 19:04:23 +01:00
|
|
|
p.update(rev)
|
2008-06-11 10:29:27 +02:00
|
|
|
rev = None
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2006-05-22 12:50:37 +02:00
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
@cmdln.option('-f', '--force', action='store_true',
|
2009-05-04 21:07:05 +02:00
|
|
|
help='forces removal of entire package and its files')
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.alias('rm')
|
|
|
|
@cmdln.alias('del')
|
|
|
|
@cmdln.alias('remove')
|
|
|
|
def do_delete(self, subcmd, opts, *args):
|
2009-05-04 21:07:05 +02:00
|
|
|
"""${cmd_name}: Mark files or directories to be deleted upon the next 'checkin'
|
2006-05-22 12:50:37 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2009-06-03 09:43:37 +02:00
|
|
|
osc delete FILE/DIRECTORY [FILE/DIRECTORY...]
|
2009-05-04 21:07:05 +02:00
|
|
|
|
|
|
|
This command works on check out copies. Use "rdelete" for working on server
|
|
|
|
side only. This is needed for removing the entire project.
|
|
|
|
|
|
|
|
As a safety measure, package must be empty (i.e., you need to delete all
|
|
|
|
packages first). If you are sure that you want to remove a package and all
|
|
|
|
its files use \'--force\' switch.
|
|
|
|
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-05-22 12:50:37 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if not args:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Missing argument.\n\n' \
|
|
|
|
+ self.get_cmd_help('delete'))
|
2006-06-26 17:11:22 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
args = parseargs(args)
|
2008-03-10 19:04:23 +01:00
|
|
|
# check if args contains a package which was removed by
|
|
|
|
# a non-osc command and mark it with the 'D'-state
|
2008-08-20 21:24:55 +02:00
|
|
|
arg_list = args[:]
|
|
|
|
for i in arg_list:
|
2008-03-10 19:04:23 +01:00
|
|
|
if not os.path.exists(i):
|
|
|
|
prj_dir, pac_dir = getPrjPacPaths(i)
|
|
|
|
if is_project_dir(prj_dir):
|
|
|
|
prj = Project(prj_dir, False)
|
|
|
|
if i in prj.pacs_broken:
|
|
|
|
if prj.get_state(i) != 'A':
|
|
|
|
prj.set_state(pac_dir, 'D')
|
|
|
|
else:
|
|
|
|
prj.del_package_node(i)
|
|
|
|
print statfrmt('D', getTransActPath(i))
|
|
|
|
args.remove(i)
|
|
|
|
prj.write_packages()
|
2007-04-25 01:00:12 +02:00
|
|
|
pacs = findpacs(args)
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
for p in pacs:
|
2008-03-10 19:04:23 +01:00
|
|
|
if not p.todo:
|
|
|
|
prj_dir, pac_dir = getPrjPacPaths(p.absdir)
|
2009-05-04 21:07:05 +02:00
|
|
|
if is_project_dir(prj_dir):
|
|
|
|
if conf.config['do_package_tracking']:
|
|
|
|
prj = Project(prj_dir, False)
|
|
|
|
prj.delPackage(p, opts.force)
|
|
|
|
else:
|
|
|
|
print "WARNING: package tracking is disabled, operation skipped !"
|
2008-03-10 19:04:23 +01:00
|
|
|
else:
|
|
|
|
pathn = getTransActPath(p.dir)
|
|
|
|
for filename in p.todo:
|
2009-07-15 23:10:38 +02:00
|
|
|
ret, state = p.delete_file(filename, opts.force)
|
|
|
|
if ret:
|
|
|
|
print statfrmt('D', os.path.join(pathn, filename))
|
|
|
|
continue
|
|
|
|
if state == '?':
|
2008-03-10 19:04:23 +01:00
|
|
|
sys.exit('\'%s\' is not under version control' % filename)
|
2009-07-15 23:10:38 +02:00
|
|
|
elif state in ['A', 'M'] and not opts.force:
|
|
|
|
sys.exit('\'%s\' has local modifications (use --force to remove this file)' % filename)
|
2006-05-23 15:48:58 +02:00
|
|
|
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_resolved(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Remove 'conflicted' state on working copy files
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
If an upstream change can't be merged automatically, a file is put into
|
|
|
|
in 'conflicted' ('C') state. Within the file, conflicts are marked with
|
|
|
|
special <<<<<<< as well as ======== and >>>>>>> lines.
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
After manually resolving all conflicting parts, use this command to
|
|
|
|
remove the 'conflicted' state.
|
|
|
|
|
|
|
|
Note: this subcommand does not semantically resolve conflicts or
|
|
|
|
remove conflict markers; it merely removes the conflict-related
|
|
|
|
artifact files and allows PATH to be committed again.
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc resolved FILE [FILE...]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if not args:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Missing argument.\n\n' \
|
|
|
|
+ self.get_cmd_help('resolved'))
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
args = parseargs(args)
|
|
|
|
pacs = findpacs(args)
|
2006-04-28 17:37:25 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
for p in pacs:
|
2006-05-19 22:13:29 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
for filename in p.todo:
|
|
|
|
print 'Resolved conflicted state of "%s"' % filename
|
|
|
|
p.clear_from_conflictlist(filename)
|
2006-04-20 16:26:50 +02:00
|
|
|
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_platforms(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Shows available platforms
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
Examples:
|
|
|
|
1. osc platforms
|
|
|
|
Shows all available platforms/build targets
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
2. osc platforms <project>
|
|
|
|
Shows the configured platforms/build targets of a project
|
2006-05-11 09:27:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if args:
|
|
|
|
project = args[0]
|
2007-05-04 23:51:54 +02:00
|
|
|
print '\n'.join(get_platforms_of_project(conf.config['apiurl'], project))
|
2007-04-25 01:00:12 +02:00
|
|
|
else:
|
2007-05-04 23:51:54 +02:00
|
|
|
print '\n'.join(get_platforms(conf.config['apiurl']))
|
2006-04-25 14:25:53 +02:00
|
|
|
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2009-05-15 11:24:53 +02:00
|
|
|
@cmdln.hide(1)
|
2007-05-04 23:51:54 +02:00
|
|
|
def do_results_meta(self, subcmd, opts, *args):
|
2009-05-25 13:33:04 +02:00
|
|
|
print "Command results_meta is obsolete. Please use: osc results --xml"
|
2009-05-15 11:24:53 +02:00
|
|
|
sys.exit(1)
|
2006-05-22 16:12:06 +02:00
|
|
|
|
2009-05-25 13:33:04 +02:00
|
|
|
@cmdln.hide(1)
|
|
|
|
def do_rresults(self, subcmd, opts, *args):
|
|
|
|
print "Command rresults is obsolete. Please use 'osc results'"
|
|
|
|
sys.exit(1)
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-07-07 16:30:15 +02:00
|
|
|
|
|
|
|
@cmdln.option('-f', '--force', action='store_true', default=False,
|
|
|
|
help="Don't ask and delete files")
|
|
|
|
def do_rremove(self, subcmd, opts, project, package, *files):
|
|
|
|
"""${cmd_name}: Remove source files from selected package
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
if len(files) == 0:
|
|
|
|
if not '/' in project:
|
|
|
|
raise oscerr.WrongArgs("Missing operand, type osc help rremove for help")
|
|
|
|
else:
|
|
|
|
files = (package, )
|
|
|
|
project, package = project.split('/')
|
|
|
|
|
|
|
|
for file in files:
|
|
|
|
if not opts.force:
|
|
|
|
resp = raw_input("rm: remove source file `%s' from `%s/%s'? " % (file, project, package))
|
|
|
|
if resp not in ('y', 'Y'):
|
|
|
|
continue
|
|
|
|
try:
|
|
|
|
delete_files(conf.config['apiurl'], project, package, (file, ))
|
|
|
|
except urllib2.HTTPError, e:
|
|
|
|
print >>sys.stderr, e.msg
|
|
|
|
|
|
|
|
if opts.force:
|
|
|
|
body = e.read()
|
|
|
|
if e.code in [ 400, 403, 404, 500 ]:
|
|
|
|
if '<summary>' in body:
|
|
|
|
msg = body.split('<summary>')[1]
|
|
|
|
msg = msg.split('</summary>')[0]
|
|
|
|
print >>sys.stderr, msg
|
|
|
|
continue
|
|
|
|
else:
|
|
|
|
raise e
|
|
|
|
|
2009-06-05 07:46:20 +02:00
|
|
|
@cmdln.hide(1)
|
|
|
|
def do_req(self, subcmd, opts, *args):
|
|
|
|
print "Command req is obsolete. Please use 'osc api'"
|
|
|
|
sys.exit(1)
|
|
|
|
|
2008-06-17 08:12:48 +02:00
|
|
|
@cmdln.alias('r')
|
2009-02-23 13:25:56 +01:00
|
|
|
@cmdln.option('-l', '--last-build', action='store_true',
|
|
|
|
help='show last build results (succeeded/failed/unknown)')
|
2009-05-15 10:48:32 +02:00
|
|
|
@cmdln.option('-r', '--repo', action='append', default = [],
|
2009-05-15 09:16:26 +02:00
|
|
|
help='Show results only for specified repo(s)')
|
2009-05-15 10:48:32 +02:00
|
|
|
@cmdln.option('-a', '--arch', action='append', default = [],
|
2009-05-15 09:16:26 +02:00
|
|
|
help='Show results only for specified architecture(s)')
|
2009-05-15 11:24:53 +02:00
|
|
|
@cmdln.option('', '--xml', action='store_true',
|
|
|
|
help='generate output in XML (former results_meta)')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_results(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Shows the build results of a package
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2009-05-25 12:41:16 +02:00
|
|
|
Usage:
|
2009-05-25 13:33:04 +02:00
|
|
|
osc results (inside working copy)
|
|
|
|
osc results remote_project remote_package
|
2008-05-16 14:25:50 +02:00
|
|
|
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2009-05-25 13:33:04 +02:00
|
|
|
|
2009-05-10 22:29:34 +02:00
|
|
|
args = slash_split(args)
|
2009-06-05 08:13:08 +02:00
|
|
|
apiurl = conf.config['apiurl']
|
2009-05-25 12:41:16 +02:00
|
|
|
if len(args) == 0:
|
2009-05-25 13:33:04 +02:00
|
|
|
wd = os.curdir
|
|
|
|
project = store_read_project(wd)
|
|
|
|
package = store_read_package(wd)
|
|
|
|
apiurl = store_read_apiurl(wd)
|
2009-05-25 12:41:16 +02:00
|
|
|
elif len(args) < 2:
|
2009-05-25 13:33:04 +02:00
|
|
|
raise oscerr.WrongArgs('Too few arguments (required none or two)')
|
2009-05-10 22:29:34 +02:00
|
|
|
elif len(args) > 2:
|
2009-05-25 13:33:04 +02:00
|
|
|
raise oscerr.WrongArgs('Too many arguments (required none or two)')
|
|
|
|
else:
|
|
|
|
project = args[0]
|
|
|
|
package = args[1]
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-05-15 11:24:53 +02:00
|
|
|
if not opts.xml:
|
|
|
|
func = get_results
|
|
|
|
delim = '\n'
|
|
|
|
else:
|
|
|
|
func = show_results_meta
|
|
|
|
delim = ''
|
2008-05-16 14:25:50 +02:00
|
|
|
|
2009-05-25 13:33:04 +02:00
|
|
|
print delim.join(func(apiurl, project, package, opts.last_build, opts.repo, opts.arch))
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2008-05-15 20:09:24 +02:00
|
|
|
@cmdln.option('-q', '--hide-legend', action='store_true',
|
|
|
|
help='hide the legend')
|
2008-03-13 12:13:22 +01:00
|
|
|
@cmdln.option('-c', '--csv', action='store_true',
|
2008-02-12 13:45:06 +01:00
|
|
|
help='csv output')
|
2008-05-15 20:09:24 +02:00
|
|
|
@cmdln.option('-s', '--status-filter', metavar='STATUS',
|
|
|
|
help='show only packages with buildstatus STATUS (see legend)')
|
|
|
|
@cmdln.option('-n', '--name-filter', metavar='EXPR',
|
2008-08-19 21:37:08 +02:00
|
|
|
help='show only packages whose names match EXPR')
|
|
|
|
@cmdln.option('-p', '--project', metavar='PROJECT',
|
|
|
|
help='show packages in project PROJECT')
|
2008-06-17 08:12:48 +02:00
|
|
|
@cmdln.alias('pr')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_prjresults(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Shows project-wide build results
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-05-25 13:33:04 +02:00
|
|
|
Usage:
|
|
|
|
osc prjresults (inside working copy)
|
|
|
|
osc prjresults project
|
2008-08-19 21:37:08 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-04-29 22:44:09 +02:00
|
|
|
|
2009-05-25 13:33:04 +02:00
|
|
|
if args:
|
2008-08-19 21:37:08 +02:00
|
|
|
apiurl = conf.config['apiurl']
|
2009-05-25 13:33:04 +02:00
|
|
|
if len(args) == 1:
|
|
|
|
project = args[0]
|
2008-08-19 21:37:08 +02:00
|
|
|
else:
|
2009-05-25 13:33:04 +02:00
|
|
|
print >>sys.stderr, 'getting results for more than one project is not supported'
|
|
|
|
return 2
|
|
|
|
else:
|
|
|
|
wd = os.curdir
|
2008-08-19 21:37:08 +02:00
|
|
|
project = store_read_project(wd)
|
|
|
|
apiurl = store_read_apiurl(wd)
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2008-05-15 20:09:24 +02:00
|
|
|
print '\n'.join(get_prj_results(apiurl, project, hide_legend=opts.hide_legend, csv=opts.csv, status_filter=opts.status_filter, name_filter=opts.name_filter))
|
2007-04-25 01:00:12 +02:00
|
|
|
|
2008-05-16 14:25:50 +02:00
|
|
|
|
|
|
|
@cmdln.option('-q', '--hide-legend', action='store_true',
|
|
|
|
help='hide the legend')
|
|
|
|
@cmdln.option('-c', '--csv', action='store_true',
|
|
|
|
help='csv output')
|
|
|
|
@cmdln.option('-s', '--status-filter', metavar='STATUS',
|
|
|
|
help='show only packages with buildstatus STATUS (see legend)')
|
|
|
|
@cmdln.option('-n', '--name-filter', metavar='EXPR',
|
2008-08-19 21:37:08 +02:00
|
|
|
help='show only packages whose names match EXPR')
|
2008-05-16 14:25:50 +02:00
|
|
|
|
2009-05-25 13:33:04 +02:00
|
|
|
@cmdln.hide(1)
|
|
|
|
def do_rprjresults(self, subcmd, opts, *args):
|
|
|
|
print "Command rprjresults is obsolete. Please use 'osc prjresults'"
|
|
|
|
sys.exit(1)
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-07-12 01:24:26 +02:00
|
|
|
@cmdln.alias('bl')
|
2009-05-14 13:09:26 +02:00
|
|
|
@cmdln.option('-s', '--start', metavar='START',
|
|
|
|
help='get log starting from the offset')
|
2007-07-12 01:24:26 +02:00
|
|
|
def do_buildlog(self, subcmd, opts, platform, arch):
|
2007-04-25 01:00:12 +02:00
|
|
|
"""${cmd_name}: Shows the build log of a package
|
|
|
|
|
|
|
|
Shows the log file of the build of a package. Can be used to follow the
|
|
|
|
log while it is being written.
|
|
|
|
Needs to be called from within a package directory.
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
The arguments PLATFORM and ARCH are the first two columns in the 'osc
|
|
|
|
results' output.
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
wd = os.curdir
|
2007-03-13 00:21:34 +01:00
|
|
|
package = store_read_package(wd)
|
|
|
|
project = store_read_project(wd)
|
2007-05-04 23:51:54 +02:00
|
|
|
apiurl = store_read_apiurl(wd)
|
2007-03-13 00:21:34 +01:00
|
|
|
|
2009-05-14 13:09:26 +02:00
|
|
|
offset=0
|
|
|
|
if opts.start:
|
|
|
|
offset = int(opts.start)
|
|
|
|
|
|
|
|
print_buildlog(apiurl, project, package, platform, arch, offset)
|
2008-01-03 23:10:16 +01:00
|
|
|
|
|
|
|
|
|
|
|
@cmdln.alias('rbl')
|
2009-05-21 14:05:39 +02:00
|
|
|
@cmdln.alias('rbuildlog')
|
2008-01-03 23:10:16 +01:00
|
|
|
def do_remotebuildlog(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Shows the build log of a package
|
|
|
|
|
|
|
|
Shows the log file of the build of a package. Can be used to follow the
|
|
|
|
log while it is being written.
|
|
|
|
|
|
|
|
usage:
|
|
|
|
osc remotebuildlog project package platform arch
|
|
|
|
or
|
|
|
|
osc remotebuildlog project/package/platform/arch
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
args = slash_split(args)
|
|
|
|
if len(args) < 4:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Too few arguments.')
|
2008-01-03 23:10:16 +01:00
|
|
|
elif len(args) > 4:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Too many arguments.')
|
2008-01-03 23:10:16 +01:00
|
|
|
|
|
|
|
print_buildlog(conf.config['apiurl'], *args)
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2007-05-09 11:36:55 +02:00
|
|
|
@cmdln.option('-x', '--extra-pkgs', metavar='PAC', action='append',
|
|
|
|
help='Add this package when computing the buildinfo')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_buildinfo(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Shows the build info
|
|
|
|
|
|
|
|
Shows the build "info" which is used in building a package.
|
|
|
|
This command is mostly used internally by the 'build' subcommand.
|
|
|
|
It needs to be called from within a package directory.
|
|
|
|
|
|
|
|
The BUILD_DESCR argument is optional. BUILD_DESCR is a local RPM specfile
|
|
|
|
or Debian "dsc" file. If specified, it is sent to the server, and the
|
|
|
|
buildinfo will be based on it. If the argument is not supplied, the
|
|
|
|
buildinfo is derived from the specfile which is currently on the source
|
|
|
|
repository server.
|
|
|
|
|
|
|
|
The returned data is XML and contains a list of the packages used in
|
|
|
|
building, their source, and the expanded BuildRequires.
|
|
|
|
|
2009-06-23 12:06:31 +02:00
|
|
|
The arguments PLATFORM and ARCH can be taken from the first two columns
|
2007-04-25 01:00:12 +02:00
|
|
|
of the 'osc repos' output.
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc buildinfo PLATFORM ARCH [BUILD_DESCR]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-09-25 17:11:03 +02:00
|
|
|
|
|
|
|
wd = os.curdir
|
2007-04-25 01:00:12 +02:00
|
|
|
package = store_read_package(wd)
|
|
|
|
project = store_read_project(wd)
|
2007-05-04 23:51:54 +02:00
|
|
|
apiurl = store_read_apiurl(wd)
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
if args is None or len(args) < 2:
|
2007-04-25 23:10:49 +02:00
|
|
|
print 'Valid arguments for this package are:'
|
2009-05-18 16:50:43 +02:00
|
|
|
print
|
2007-04-25 01:00:12 +02:00
|
|
|
self.do_repos(None, None)
|
|
|
|
print
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Missing argument')
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
platform = args[0]
|
|
|
|
arch = args[1]
|
|
|
|
|
|
|
|
# were we given a specfile (third argument)?
|
|
|
|
try:
|
|
|
|
spec = open(args[2]).read()
|
|
|
|
except IndexError:
|
|
|
|
spec = None
|
|
|
|
except IOError, e:
|
2007-04-25 23:10:49 +02:00
|
|
|
print >>sys.stderr, e
|
|
|
|
return 1
|
2007-04-25 01:00:12 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
print ''.join(get_buildinfo(apiurl,
|
|
|
|
project, package, platform, arch,
|
|
|
|
specfile=spec,
|
2007-05-09 11:36:55 +02:00
|
|
|
addlist=opts.extra_pkgs))
|
2007-04-25 01:00:12 +02:00
|
|
|
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_buildconfig(self, subcmd, opts, platform, arch):
|
|
|
|
"""${cmd_name}: Shows the build config
|
|
|
|
|
|
|
|
Shows the build configuration which is used in building a package.
|
|
|
|
This command is mostly used internally by the 'build' command.
|
|
|
|
It needs to be called from inside a package directory.
|
|
|
|
|
|
|
|
The returned data is the project-wide build configuration in a format
|
|
|
|
which is directly readable by the build script. It contains RPM macros
|
|
|
|
and BuildRequires expansions, for example.
|
|
|
|
|
2009-06-23 12:06:31 +02:00
|
|
|
The arguments PLATFORM and ARCH can be taken from the first two columns
|
2009-06-16 15:31:11 +02:00
|
|
|
of the 'osc repos' output.
|
2007-04-25 01:00:12 +02:00
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
wd = os.curdir
|
|
|
|
package = store_read_package(wd)
|
2006-09-25 17:11:03 +02:00
|
|
|
project = store_read_project(wd)
|
2007-05-04 23:51:54 +02:00
|
|
|
apiurl = store_read_apiurl(wd)
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2007-05-04 23:51:54 +02:00
|
|
|
print ''.join(get_buildconfig(apiurl, project, package, platform, arch))
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_repos(self, subcmd, opts, *args):
|
2008-03-18 00:24:28 +01:00
|
|
|
"""${cmd_name}: Shows the repositories which are defined for a package or a project
|
2006-06-22 13:26:01 +02:00
|
|
|
|
2008-03-18 00:24:28 +01:00
|
|
|
ARG, if specified, is a package working copy or a project dir.
|
2006-06-22 13:26:01 +02:00
|
|
|
|
2008-03-18 00:24:28 +01:00
|
|
|
examples: 1. osc repos # project/package = current dir
|
2007-04-25 01:00:12 +02:00
|
|
|
2. osc repos <packagedir>
|
2008-03-18 00:24:28 +01:00
|
|
|
3. osc repos <projectdir>
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-09-15 13:47:34 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
args = parseargs(args)
|
2006-09-15 13:47:34 +02:00
|
|
|
|
2008-03-18 00:24:28 +01:00
|
|
|
for arg in args:
|
|
|
|
for platform in get_repos_of_project(store_read_apiurl(arg), store_read_project(arg)):
|
2007-04-25 01:00:12 +02:00
|
|
|
print platform
|
2006-07-05 12:25:31 +02:00
|
|
|
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.option('--clean', action='store_true',
|
|
|
|
help='Delete old build root before initializing it')
|
2007-09-03 12:25:18 +02:00
|
|
|
@cmdln.option('--no-changelog', action='store_true',
|
|
|
|
help='don\'t update the package changelog from a changes file')
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.option('--noinit', '--no-init', action='store_true',
|
|
|
|
help='Skip initialization of build root and start with build immediately.')
|
2008-07-23 22:05:09 +02:00
|
|
|
@cmdln.option('--nochecks', '--no-checks', action='store_true',
|
|
|
|
help='Do not run post build checks on the resulting packages.')
|
2008-01-24 19:06:45 +01:00
|
|
|
@cmdln.option('--no-verify', action='store_true',
|
|
|
|
help='Skip signature verification of packages used for build.')
|
2007-05-03 17:54:40 +02:00
|
|
|
@cmdln.option('-p', '--prefer-pkgs', metavar='DIR', action='append',
|
2007-05-02 15:49:57 +02:00
|
|
|
help='Prefer packages from this directory when installing the build-root')
|
2009-05-18 16:50:43 +02:00
|
|
|
@cmdln.option('-k', '--keep-pkgs', metavar='DIR',
|
2007-05-03 17:54:40 +02:00
|
|
|
help='Save built packages into this directory')
|
2007-05-09 11:36:55 +02:00
|
|
|
@cmdln.option('-x', '--extra-pkgs', metavar='PAC', action='append',
|
|
|
|
help='Add this package when installing the build-root')
|
2008-04-24 11:00:23 +02:00
|
|
|
@cmdln.option('-j', '--jobs', metavar='N',
|
|
|
|
help='Compile with N jobs')
|
2008-12-11 12:36:07 +01:00
|
|
|
@cmdln.option('--icecream', metavar='N',
|
|
|
|
help='use N parallel build jobs with icecream')
|
|
|
|
@cmdln.option('--ccache', action='store_true',
|
|
|
|
help='use ccache to speed up rebuilds')
|
|
|
|
@cmdln.option('--with', metavar='X', dest='_with',
|
|
|
|
help='enable feature X for build')
|
|
|
|
@cmdln.option('--without', metavar='X',
|
|
|
|
help='disable feature X for build')
|
|
|
|
# will not work as build.py does not support proper quoting
|
|
|
|
# @cmdln.option('--define', metavar='\'X Y\'',
|
|
|
|
# help='define macro X with value Y')
|
2007-05-14 10:29:50 +02:00
|
|
|
@cmdln.option('--userootforbuild', action='store_true',
|
|
|
|
help='Run build as root. The default is to build as '
|
|
|
|
'unprivileged user. Note that a line "# norootforbuild" '
|
|
|
|
'in the spec file will invalidate this option.')
|
2009-03-31 13:45:30 +02:00
|
|
|
@cmdln.option('--local-package', action='store_true',
|
2008-01-07 15:54:31 +01:00
|
|
|
help='build a package which does not exist on the server')
|
2009-03-31 13:45:30 +02:00
|
|
|
@cmdln.option('--alternative-project', metavar='PROJECT',
|
2008-01-07 15:54:31 +01:00
|
|
|
help='specify the build target project')
|
2008-03-11 16:18:02 +01:00
|
|
|
@cmdln.option('-d', '--debuginfo', action='store_true',
|
|
|
|
help='also build debuginfo sub-packages')
|
2009-03-31 13:45:30 +02:00
|
|
|
@cmdln.option('--disable-debuginfo', action='store_true',
|
|
|
|
help='disable build of debuginfo packages')
|
2008-05-08 14:21:57 +02:00
|
|
|
@cmdln.option('-b', '--baselibs', action='store_true',
|
|
|
|
help='Create -32bit/-64bit/-x86 rpms for other architectures')
|
2007-04-25 01:00:12 +02:00
|
|
|
def do_build(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Build a package on your local machine
|
2006-09-15 13:47:34 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
You need to call the command inside a package directory, which should be a
|
|
|
|
buildsystem checkout. (Local modifications are fine.)
|
2006-07-05 12:25:31 +02:00
|
|
|
|
2009-06-23 12:06:31 +02:00
|
|
|
The arguments PLATFORM and ARCH can be taken from the first two columns
|
2007-04-25 01:00:12 +02:00
|
|
|
of the 'osc repos' output. BUILD_DESCR is either a RPM spec file, or a
|
|
|
|
Debian dsc file.
|
2006-07-05 12:25:31 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
The command honours packagecachedir and build-root settings in .oscrc,
|
|
|
|
if present. You may want to set su-wrapper = 'sudo' in .oscrc, and
|
|
|
|
configure sudo with option NOPASSWD for /usr/bin/build.
|
2006-07-05 12:25:31 +02:00
|
|
|
|
2007-05-02 15:49:57 +02:00
|
|
|
If neither --clean nor --noinit is given, build will reuse an existing
|
|
|
|
build-root again, removing unneeded packages and add missing ones. This
|
|
|
|
is usually the fastest option.
|
2006-07-05 12:25:31 +02:00
|
|
|
|
2008-01-07 15:54:31 +01:00
|
|
|
If the package doesn't exist on the server please use the --local-package
|
|
|
|
option.
|
|
|
|
If the project of the package doesn't exist on the server please use the
|
|
|
|
--alternative-project <alternative-project> option:
|
|
|
|
Example:
|
|
|
|
osc build [OPTS] --alternative-project openSUSE:10.3 standard i586 BUILD_DESCR
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2007-04-25 01:00:12 +02:00
|
|
|
osc build [OPTS] PLATFORM ARCH BUILD_DESCR
|
2008-07-30 18:45:00 +02:00
|
|
|
osc build [OPTS] PLATFORM (ARCH = hostarch, BUILD_DESCR is detected automatically)
|
|
|
|
osc build [OPTS] ARCH (PLATFORM = build_platform (config option), BUILD_DESCR is detected automatically)
|
|
|
|
osc build [OPTS] BUILD_DESCR (PLATFORM = build_platform (config option), ARCH = hostarch)
|
|
|
|
osc build [OPTS] (PLATFORM = build_platform (config option), ARCH = hostarch, BUILD_DESCR is detected automatically)
|
2008-04-09 20:45:59 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
# Note:
|
|
|
|
# Configuration can be overridden by envvars, e.g.
|
|
|
|
# OSC_SU_WRAPPER overrides the setting of su-wrapper.
|
2008-04-09 20:45:59 +02:00
|
|
|
# OSC_BUILD_ROOT overrides the setting of build-root.
|
|
|
|
# OSC_PACKAGECACHEDIR overrides the setting of packagecachedir.
|
|
|
|
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-07-14 19:39:46 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
import osc.build
|
2006-07-14 19:45:44 +02:00
|
|
|
|
2007-09-03 16:52:45 +02:00
|
|
|
if not os.path.exists('/usr/lib/build/debtransform') \
|
|
|
|
and not os.path.exists('/usr/lib/lbuild/debtransform'):
|
2007-07-19 12:49:30 +02:00
|
|
|
sys.stderr.write('Error: you need build.rpm with version 2007.3.12 or newer.\n')
|
2007-07-16 11:45:17 +02:00
|
|
|
sys.stderr.write('See http://download.opensuse.org/repositories/openSUSE:/Tools/\n')
|
2007-04-25 01:00:12 +02:00
|
|
|
return 1
|
2006-07-17 15:15:42 +02:00
|
|
|
|
2009-03-31 13:45:30 +02:00
|
|
|
if opts.debuginfo and opts.disable_debuginfo:
|
|
|
|
raise oscerr.WrongOptions('osc: --debuginfo and --disable-debuginfo are mutual exclusive')
|
|
|
|
|
2008-07-30 18:45:00 +02:00
|
|
|
if len(args) > 3:
|
|
|
|
raise oscerr.WrongArgs('Too many arguments')
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2008-07-30 18:45:00 +02:00
|
|
|
arg_arch = arg_platform = arg_descr = None
|
|
|
|
if len(args) < 3:
|
|
|
|
for arg in args:
|
|
|
|
if arg.endswith('.spec') or arg.endswith('.dsc'):
|
|
|
|
arg_descr = arg
|
|
|
|
else:
|
|
|
|
if arg in osc.build.can_also_build.get(osc.build.hostarch, []) or \
|
|
|
|
arg in osc.build.hostarch:
|
|
|
|
arg_arch = arg
|
|
|
|
elif not arg_platform:
|
|
|
|
arg_platform = arg
|
|
|
|
else:
|
|
|
|
raise oscerr.WrongArgs('unexpected argument: \'%s\'' % arg)
|
|
|
|
else:
|
|
|
|
arg_platform, arg_arch, arg_descr = args
|
|
|
|
|
|
|
|
arg_arch = arg_arch or osc.build.hostarch
|
2009-06-23 12:06:31 +02:00
|
|
|
|
2009-06-11 13:32:58 +02:00
|
|
|
platforms = get_platforms_of_project( \
|
|
|
|
store_read_apiurl('.'), \
|
|
|
|
opts.alternative_project or store_read_project('.'))
|
|
|
|
if not arg_platform:
|
|
|
|
|
2009-06-11 13:38:06 +02:00
|
|
|
if len(platforms) == 0:
|
|
|
|
arg_platform = conf.config['build_platform']
|
2009-06-23 12:06:31 +02:00
|
|
|
|
2009-06-11 13:38:06 +02:00
|
|
|
else:
|
|
|
|
|
|
|
|
# Use a default value from config, but just even if it's available
|
|
|
|
# unless try standard, or openSUSE_Factory
|
|
|
|
for platform in (conf.config['build_platform'], 'standard', 'openSUSE_Factory'):
|
|
|
|
if platform in platforms:
|
|
|
|
arg_platform = platform
|
|
|
|
break
|
|
|
|
|
|
|
|
arg_platform = arg_platform or platforms[len(platforms)-1]
|
2009-06-11 13:32:58 +02:00
|
|
|
|
|
|
|
if not arg_platform in platforms:
|
|
|
|
raise oscerr.WrongArgs('%s is not a valid platform, use one of: %s' % (arg_platform, ", ".join(platforms)))
|
|
|
|
|
2008-07-30 18:45:00 +02:00
|
|
|
descr = [ i for i in os.listdir('.') if i.endswith('.spec') or i.endswith('.dsc') ]
|
2009-02-23 15:59:10 +01:00
|
|
|
# FIXME:
|
2009-05-18 16:50:43 +02:00
|
|
|
# * request repos from server and select by build type.
|
2008-07-30 18:45:00 +02:00
|
|
|
if not arg_descr and len(descr) == 1:
|
|
|
|
arg_descr = descr[0]
|
|
|
|
elif not arg_descr:
|
2009-02-23 15:59:10 +01:00
|
|
|
msg = 'Missing argument: build description (spec, dsc or kiwi file)'
|
2009-02-11 13:53:05 +01:00
|
|
|
try:
|
|
|
|
p = Package('.')
|
|
|
|
if p.islink() and not p.isexpanded():
|
|
|
|
msg += ' (this package is not expanded - you might want to try osc up --expand)'
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
raise oscerr.WrongArgs(msg)
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
|
2008-07-30 18:45:00 +02:00
|
|
|
args = (arg_platform, arg_arch, arg_descr)
|
2006-07-14 19:39:46 +02:00
|
|
|
|
2007-05-03 17:54:40 +02:00
|
|
|
if opts.prefer_pkgs:
|
|
|
|
for d in opts.prefer_pkgs:
|
2007-05-02 15:49:57 +02:00
|
|
|
if not os.path.isdir(d):
|
|
|
|
print >> sys.stderr, 'Preferred package location \'%s\' is not a directory' % d
|
|
|
|
return 1
|
|
|
|
|
2007-05-03 17:54:40 +02:00
|
|
|
if opts.keep_pkgs:
|
|
|
|
if not os.path.isdir(opts.keep_pkgs):
|
|
|
|
print >> sys.stderr, 'Preferred save location \'%s\' is not a directory' % opts.keep_pkgs
|
|
|
|
return 1
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2008-07-30 18:45:00 +02:00
|
|
|
print 'Building %s for %s/%s' % (arg_descr, arg_platform, arg_arch)
|
2007-05-02 15:49:57 +02:00
|
|
|
return osc.build.main(opts, args)
|
2006-07-14 19:39:46 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2006-07-14 19:39:46 +02:00
|
|
|
|
2009-05-13 11:04:27 +02:00
|
|
|
@cmdln.option('', '--csv', action='store_true',
|
|
|
|
help='generate output in CSV (separated by |)')
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.alias('buildhist')
|
|
|
|
def do_buildhistory(self, subcmd, opts, platform, arch):
|
|
|
|
"""${cmd_name}: Shows the build history of a package
|
2006-05-19 22:13:29 +02:00
|
|
|
|
2009-06-23 12:06:31 +02:00
|
|
|
The arguments PLATFORM and ARCH can be taken from the first two columns
|
2007-04-25 01:00:12 +02:00
|
|
|
of the 'osc repos' output.
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
wd = os.curdir
|
|
|
|
package = store_read_package(wd)
|
|
|
|
project = store_read_project(wd)
|
2007-05-04 23:51:54 +02:00
|
|
|
apiurl = store_read_apiurl(wd)
|
2006-09-29 12:37:53 +02:00
|
|
|
|
2009-05-13 11:04:27 +02:00
|
|
|
format = 'text'
|
|
|
|
if opts.csv:
|
|
|
|
format = 'csv'
|
|
|
|
|
|
|
|
print '\n'.join(get_buildhistory(apiurl, project, package, platform, arch, format))
|
2006-06-08 12:30:29 +02:00
|
|
|
|
2009-05-13 11:04:27 +02:00
|
|
|
@cmdln.option('', '--csv', action='store_true',
|
|
|
|
help='generate output in CSV (separated by |)')
|
2009-02-20 12:04:45 +01:00
|
|
|
@cmdln.alias('jobhist')
|
|
|
|
def do_jobhistory(self, subcmd, opts, platform, arch):
|
|
|
|
"""${cmd_name}: Shows the job history of a project
|
|
|
|
|
2009-06-23 12:06:31 +02:00
|
|
|
The arguments PLATFORM and ARCH can be taken from the first two columns
|
2009-02-20 12:04:45 +01:00
|
|
|
of the 'osc repos' output.
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
wd = os.curdir
|
|
|
|
project = store_read_project(wd)
|
|
|
|
package = None
|
|
|
|
try:
|
|
|
|
package = store_read_package(wd)
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
apiurl = store_read_apiurl(wd)
|
|
|
|
|
2009-05-13 11:04:27 +02:00
|
|
|
format = 'text'
|
|
|
|
if opts.csv:
|
|
|
|
format = 'csv'
|
|
|
|
|
|
|
|
print_jobhistory(apiurl, project, package, platform, arch, format)
|
2009-02-20 12:04:45 +01:00
|
|
|
|
2009-05-25 13:33:04 +02:00
|
|
|
@cmdln.hide(1)
|
|
|
|
def do_rlog(self, subcmd, opts, *args):
|
|
|
|
print "Command rlog is obsolete. Please use 'osc log'"
|
|
|
|
sys.exit(1)
|
2006-10-10 16:04:34 +02:00
|
|
|
|
2007-07-12 02:48:52 +02:00
|
|
|
@cmdln.option('-r', '--revision', metavar='rev',
|
|
|
|
help='show log of the specified revision')
|
2009-05-13 10:53:32 +02:00
|
|
|
@cmdln.option('', '--csv', action='store_true',
|
|
|
|
help='generate output in CSV (separated by |)')
|
|
|
|
@cmdln.option('', '--xml', action='store_true',
|
|
|
|
help='generate output in XML')
|
2009-05-25 13:33:04 +02:00
|
|
|
def do_log(self, subcmd, opts, *args):
|
2007-07-12 01:24:26 +02:00
|
|
|
"""${cmd_name}: Shows the commit log of a package
|
|
|
|
|
2009-05-25 12:41:16 +02:00
|
|
|
Usage:
|
2009-05-25 13:33:04 +02:00
|
|
|
osc log (inside working copy)
|
|
|
|
osc log remote_project remote_package
|
2009-05-25 12:41:16 +02:00
|
|
|
|
2008-09-23 15:39:54 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
2009-05-25 12:41:16 +02:00
|
|
|
args = slash_split(args)
|
|
|
|
if len(args) == 0:
|
2009-05-25 13:33:04 +02:00
|
|
|
wd = os.curdir
|
|
|
|
project = store_read_project(wd)
|
|
|
|
package = store_read_package(wd)
|
|
|
|
apiurl = store_read_apiurl(wd)
|
2009-05-25 12:41:16 +02:00
|
|
|
elif len(args) < 2:
|
2009-05-25 13:33:04 +02:00
|
|
|
raise oscerr.WrongArgs('Too few arguments (required none or two)')
|
2009-05-25 12:41:16 +02:00
|
|
|
elif len(args) > 2:
|
2009-05-25 13:33:04 +02:00
|
|
|
raise oscerr.WrongArgs('Too many arguments (required none or two)')
|
|
|
|
else:
|
|
|
|
apiurl = conf.config['apiurl']
|
|
|
|
project = args[0]
|
|
|
|
package = args[1]
|
2009-05-25 12:41:16 +02:00
|
|
|
|
2008-09-23 15:39:54 +02:00
|
|
|
rev, dummy = parseRevisionOption(opts.revision)
|
2009-05-25 13:33:04 +02:00
|
|
|
if rev and not checkRevision(project, package, rev, apiurl):
|
2008-09-23 15:39:54 +02:00
|
|
|
print >>sys.stderr, 'Revision \'%s\' does not exist' % rev
|
|
|
|
sys.exit(1)
|
|
|
|
|
2009-05-13 10:53:32 +02:00
|
|
|
format = 'text'
|
|
|
|
if opts.csv:
|
|
|
|
format = 'csv'
|
|
|
|
if opts.xml:
|
|
|
|
format = 'xml'
|
|
|
|
|
2009-05-25 13:33:04 +02:00
|
|
|
print '\n'.join(get_commitlog(apiurl, project, package, rev, format))
|
2008-09-23 15:39:54 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
@cmdln.option('-f', '--failed', action='store_true',
|
|
|
|
help='rebuild all failed packages')
|
2009-06-15 17:38:39 +02:00
|
|
|
@cmdln.alias('rebuildpac')
|
|
|
|
def do_rebuild(self, subcmd, opts, *args):
|
2007-04-25 01:00:12 +02:00
|
|
|
"""${cmd_name}: Triggers package rebuilds
|
2006-10-10 16:04:34 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
With the optional <repo> and <arch> arguments, the rebuild can be limited
|
|
|
|
to a certain repository or architecture.
|
2006-06-08 12:30:29 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
Note that it is normally NOT needed to kick off rebuilds like this, because
|
|
|
|
they principally happen in a fully automatic way, triggered by source
|
|
|
|
check-ins. In particular, the order in which packages are built is handled
|
|
|
|
by the build service.
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
Note the --failed option, which can be used to rebuild all failed
|
|
|
|
packages.
|
2006-09-25 17:11:03 +02:00
|
|
|
|
2009-06-23 12:06:31 +02:00
|
|
|
The arguments PLATFORM and ARCH can be taken from the first two columns
|
|
|
|
of the 'osc repos' output.
|
2006-06-08 12:30:29 +02:00
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2009-06-15 17:38:39 +02:00
|
|
|
osc rebuild PROJECT [PACKAGE [PLATFORM [ARCH]]]
|
2007-04-25 01:00:12 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2006-06-08 12:30:29 +02:00
|
|
|
|
2007-06-26 15:17:38 +02:00
|
|
|
args = slash_split(args)
|
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if len(args) < 1:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Missing argument.')
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
package = repo = arch = code = None
|
|
|
|
project = args[0]
|
|
|
|
if len(args) > 1:
|
|
|
|
package = args[1]
|
|
|
|
if len(args) > 2:
|
|
|
|
repo = args[2]
|
|
|
|
if len(args) > 3:
|
|
|
|
arch = args[3]
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2007-04-25 01:00:12 +02:00
|
|
|
if opts.failed:
|
|
|
|
code = 'failed'
|
|
|
|
|
2007-06-14 16:30:36 +02:00
|
|
|
print rebuild(conf.config['apiurl'], project, package, repo, arch, code)
|
2006-05-23 15:48:58 +02:00
|
|
|
|
2006-04-20 16:26:50 +02:00
|
|
|
|
2007-05-04 23:51:54 +02:00
|
|
|
def do_info(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Print information about a working copy
|
|
|
|
|
|
|
|
Print information about each ARG (default: '.')
|
|
|
|
ARG is a working-copy path.
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
args = parseargs(args)
|
|
|
|
pacs = findpacs(args)
|
|
|
|
|
|
|
|
|
|
|
|
for p in pacs:
|
|
|
|
print p.info()
|
|
|
|
|
2006-05-19 22:13:29 +02:00
|
|
|
|
2007-06-14 16:30:36 +02:00
|
|
|
@cmdln.option('-a', '--arch', metavar='ARCH',
|
|
|
|
help='Abort builds for a specific architecture')
|
|
|
|
@cmdln.option('-r', '--repo', metavar='REPO',
|
|
|
|
help='Abort builds for a specific repository')
|
|
|
|
def do_abortbuild(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Aborts the build of a certain project/package
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-06-14 16:30:36 +02:00
|
|
|
With the optional argument <package> you can specify a certain package
|
|
|
|
otherwise all builds in the project will be cancelled.
|
2009-05-18 16:50:43 +02:00
|
|
|
|
|
|
|
usage:
|
2007-06-14 16:30:36 +02:00
|
|
|
osc abortbuild [OPTS] PROJECT [PACKAGE]
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
if len(args) < 1:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Missing <project> argument.')
|
2007-06-14 16:30:36 +02:00
|
|
|
|
|
|
|
if len(args) == 2:
|
|
|
|
package = args[1]
|
|
|
|
else:
|
|
|
|
package = None
|
|
|
|
|
|
|
|
print abortbuild(conf.config['apiurl'], args[0], package, opts.arch, opts.repo)
|
|
|
|
|
|
|
|
|
|
|
|
@cmdln.option('-a', '--arch', metavar='ARCH',
|
2007-07-04 16:57:19 +02:00
|
|
|
help='Delete all binary packages for a specific architecture')
|
2007-06-14 16:30:36 +02:00
|
|
|
@cmdln.option('-r', '--repo', metavar='REPO',
|
|
|
|
help='Delete all binary packages for a specific repository')
|
2007-07-04 16:57:19 +02:00
|
|
|
@cmdln.option('--build-disabled', action='store_true',
|
|
|
|
help='Delete all binaries of packages for which the build is disabled')
|
2007-10-27 21:13:24 +02:00
|
|
|
@cmdln.option('--build-failed', action='store_true',
|
|
|
|
help='Delete all binaries of packages for which the build failed')
|
|
|
|
@cmdln.option('--broken', action='store_true',
|
|
|
|
help='Delete all binaries of packages for which the package source is bad')
|
2009-01-10 23:55:25 +01:00
|
|
|
@cmdln.option('--expansion', action='store_true',
|
|
|
|
help='Delete all binaries of packages which have expansion errors')
|
2009-05-31 13:00:03 +02:00
|
|
|
@cmdln.option('--all', action='store_true',
|
|
|
|
help='Delete all binaries regardless of the package status (previously default)')
|
2007-06-14 16:30:36 +02:00
|
|
|
def do_wipebinaries(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Delete all binary packages of a certain project/package
|
|
|
|
|
2007-07-15 15:49:13 +02:00
|
|
|
With the optional argument <package> you can specify a certain package
|
2007-06-14 16:30:36 +02:00
|
|
|
otherwise all binary packages in the project will be deleted.
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2009-05-31 13:00:03 +02:00
|
|
|
osc wipebinaries OPTS PROJECT [PACKAGE]
|
2007-06-14 16:30:36 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-06-26 15:17:38 +02:00
|
|
|
args = slash_split(args)
|
|
|
|
|
2007-06-14 16:30:36 +02:00
|
|
|
if len(args) < 1:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Missing <project> argument.')
|
2008-06-11 10:01:10 +02:00
|
|
|
if len(args) > 2:
|
|
|
|
raise oscerr.WrongArgs('Wrong number of arguments.')
|
|
|
|
|
2007-06-14 16:30:36 +02:00
|
|
|
if len(args) == 2:
|
|
|
|
package = args[1]
|
|
|
|
else:
|
|
|
|
package = None
|
2007-10-27 21:13:24 +02:00
|
|
|
|
|
|
|
codes = []
|
|
|
|
if opts.build_disabled:
|
|
|
|
codes.append('disabled')
|
|
|
|
if opts.build_failed:
|
|
|
|
codes.append('failed')
|
|
|
|
if opts.broken:
|
|
|
|
codes.append('broken')
|
2009-01-10 23:55:25 +01:00
|
|
|
if opts.expansion:
|
|
|
|
codes.append('expansion error')
|
2009-07-07 16:31:59 +02:00
|
|
|
if opts.all or opts.repo or opts.arch:
|
2009-05-31 13:00:03 +02:00
|
|
|
codes.append(None)
|
2007-10-27 21:13:24 +02:00
|
|
|
|
|
|
|
if len(codes) == 0:
|
2009-05-31 13:00:03 +02:00
|
|
|
print 'No option has been provided. If you want to delete all binaries, use --all option.'
|
|
|
|
return 1
|
2007-10-27 21:13:24 +02:00
|
|
|
|
|
|
|
# make a new request for each code= parameter
|
|
|
|
for code in codes:
|
|
|
|
print wipebinaries(conf.config['apiurl'], args[0], package, opts.arch, opts.repo, code)
|
2007-06-14 16:30:36 +02:00
|
|
|
|
|
|
|
|
2008-09-30 16:54:08 +02:00
|
|
|
@cmdln.option('-q', '--quiet', action='store_true',
|
|
|
|
help='do not show downloading progress')
|
|
|
|
@cmdln.option('-d', '--destdir', default='.', metavar='DIR',
|
|
|
|
help='destination directory')
|
2009-01-16 11:31:38 +01:00
|
|
|
@cmdln.option('--sources', action="store_true",
|
|
|
|
help='also fetch source packages')
|
2009-04-21 11:46:32 +02:00
|
|
|
def do_getbinaries(self, subcmd, opts, *args):
|
2008-09-30 16:54:08 +02:00
|
|
|
"""${cmd_name}: Download binaries to a local directory
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
This command downloads packages directly from the api server.
|
2009-02-20 16:01:16 +01:00
|
|
|
Thus, it directly accesses the packages that are used for building
|
|
|
|
others even when they are not "published" yet.
|
2008-09-30 16:54:08 +02:00
|
|
|
|
2009-04-21 11:46:32 +02:00
|
|
|
usage:
|
|
|
|
osc getbinaries REPOSITORY ARCHITECTURE # works in checked out package
|
|
|
|
osc getbinaries PROJECT PACKAGE REPOSITORY ARCHITECTURE
|
2008-09-30 16:54:08 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
2009-04-21 11:46:32 +02:00
|
|
|
args = slash_split(args)
|
|
|
|
apiurl = conf.config['apiurl']
|
|
|
|
|
|
|
|
if len(args) == 4:
|
|
|
|
project = args[0]
|
|
|
|
package = args[1]
|
|
|
|
repository = args[2]
|
|
|
|
architecture = args[3]
|
|
|
|
elif len(args) == 2:
|
|
|
|
if is_package_dir(os.getcwd()):
|
|
|
|
project = Project(os.getcwd()).name
|
|
|
|
p = Package(os.getcwd())
|
|
|
|
package = p.name
|
|
|
|
apiurl = p.apiurl
|
|
|
|
repository = args[0]
|
|
|
|
architecture = args[1]
|
|
|
|
else:
|
|
|
|
sys.exit('Local directory is no checkout package, neither it is specified. ' )
|
|
|
|
else:
|
|
|
|
sys.exit('Need either 2 or 4 arguments.' )
|
|
|
|
|
2008-09-30 16:54:08 +02:00
|
|
|
# Get package list
|
2009-05-18 16:50:43 +02:00
|
|
|
binaries = get_binarylist(apiurl,
|
|
|
|
project, repository, architecture,
|
2008-09-30 16:54:08 +02:00
|
|
|
package = package, verbose=True)
|
|
|
|
|
|
|
|
if not os.path.isdir(opts.destdir):
|
|
|
|
print "Creating %s" % opts.destdir
|
|
|
|
os.makedirs(opts.destdir, 0755)
|
|
|
|
|
|
|
|
if binaries == [ ]:
|
|
|
|
sys.exit('no binaries found. Either the package does not '
|
2009-02-20 16:01:16 +01:00
|
|
|
'exist or no binaries have been built.')
|
2008-09-30 16:54:08 +02:00
|
|
|
|
|
|
|
for binary in binaries:
|
|
|
|
|
|
|
|
# skip source rpms
|
2009-01-16 11:31:38 +01:00
|
|
|
if not opts.sources and binary.name.endswith('.src.rpm'):
|
2008-09-30 16:54:08 +02:00
|
|
|
continue
|
|
|
|
|
|
|
|
target_filename = '%s/%s' % (opts.destdir, binary.name)
|
|
|
|
|
|
|
|
if os.path.exists(target_filename):
|
|
|
|
st = os.stat(target_filename)
|
|
|
|
if st.st_mtime == binary.mtime and st.st_size == binary.size:
|
|
|
|
continue
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
get_binary_file(apiurl,
|
|
|
|
project,
|
|
|
|
repository, architecture,
|
|
|
|
binary.name,
|
2008-09-30 16:54:08 +02:00
|
|
|
package = package,
|
|
|
|
target_filename = target_filename,
|
|
|
|
target_mtime = binary.mtime,
|
|
|
|
progress_meter = not opts.quiet)
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-08-09 13:35:08 +02:00
|
|
|
@cmdln.option('--repos-baseurl', action='store_true',
|
|
|
|
help='show base URLs of download repositories')
|
2009-04-07 20:45:42 +02:00
|
|
|
@cmdln.option('-e', '--exact', action='store_true',
|
2007-07-15 15:49:13 +02:00
|
|
|
help='show only exact matches')
|
|
|
|
@cmdln.option('--package', action='store_true',
|
|
|
|
help='search for a package')
|
|
|
|
@cmdln.option('--project', action='store_true',
|
|
|
|
help='search for a project')
|
|
|
|
@cmdln.option('--title', action='store_true',
|
|
|
|
help='search for matches in the \'title\' element')
|
|
|
|
@cmdln.option('--description', action='store_true',
|
|
|
|
help='search for matches in the \'description\' element')
|
|
|
|
@cmdln.option('-v', '--verbose', action='store_true',
|
|
|
|
help='show more information')
|
2008-06-24 17:07:44 +02:00
|
|
|
@cmdln.option('-i', '--involved', action='store_true',
|
2009-05-15 10:07:03 +02:00
|
|
|
help='show projects/packages where given person is involved')
|
2009-05-15 10:33:25 +02:00
|
|
|
@cmdln.option('--csv', action='store_true',
|
|
|
|
help='generate output in CSV (separated by |)')
|
2007-07-15 15:49:13 +02:00
|
|
|
def do_search(self, subcmd, opts, *args):
|
2007-12-10 15:23:58 +01:00
|
|
|
"""${cmd_name}: Search for a project and/or package.
|
2007-07-15 15:49:13 +02:00
|
|
|
|
|
|
|
If no option is specified osc will search for projects and
|
|
|
|
packages which contains the \'search term\' in their name,
|
|
|
|
title or description.
|
|
|
|
|
|
|
|
usage:
|
|
|
|
osc search \'search term\' <options>
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
2008-06-24 17:07:44 +02:00
|
|
|
search_term = None
|
2007-07-15 15:49:13 +02:00
|
|
|
if len(args) > 1:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Too many arguments.')
|
2008-06-24 17:07:44 +02:00
|
|
|
elif len(args) < 1 and not opts.involved:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Too few arguments.')
|
2008-06-24 17:07:44 +02:00
|
|
|
elif len(args) == 1:
|
|
|
|
search_term = args[0]
|
|
|
|
|
|
|
|
if (opts.title or opts.description) and opts.involved:
|
|
|
|
raise oscerr.WrongArgs('Sorry, the options \'--title\' and/or \'--description\' ' \
|
|
|
|
'plus \'--involved\' are mutual exclusive')
|
2007-07-15 15:49:13 +02:00
|
|
|
|
|
|
|
search_list = []
|
|
|
|
search_for = []
|
|
|
|
if opts.title:
|
|
|
|
search_list.append('title')
|
|
|
|
if opts.description:
|
|
|
|
search_list.append('description')
|
|
|
|
if opts.package:
|
|
|
|
search_list.append('@name')
|
|
|
|
search_for.append('package')
|
|
|
|
if opts.project:
|
|
|
|
search_list.append('@name')
|
|
|
|
search_for.append('project')
|
2008-06-24 17:07:44 +02:00
|
|
|
if opts.involved:
|
|
|
|
search_list = [ 'person/@userid' ]
|
|
|
|
search_term = search_term or conf.get_apiurl_usr(conf.config['apiurl'])
|
2009-04-15 19:30:13 +02:00
|
|
|
opts.exact = True
|
2007-07-15 15:49:13 +02:00
|
|
|
|
|
|
|
if not search_list:
|
|
|
|
search_list = ['title', 'description', '@name']
|
|
|
|
if not search_for:
|
|
|
|
search_for = [ 'project', 'package' ]
|
|
|
|
for kind in search_for:
|
2009-04-15 19:30:13 +02:00
|
|
|
result = search(conf.config['apiurl'], set(search_list), kind, search_term, opts.verbose, opts.exact, opts.repos_baseurl)
|
2009-06-09 19:04:31 +02:00
|
|
|
|
2009-06-09 19:07:02 +02:00
|
|
|
if not result:
|
|
|
|
print 'No matches found for \'%s\' in %ss' % (search_term, kind)
|
|
|
|
continue
|
|
|
|
|
2009-06-09 19:04:31 +02:00
|
|
|
# unfortunately, there is no sort support in the api.
|
|
|
|
# we can do it here. Maybe it would be better done in osc.core.search() already.
|
2009-06-09 19:07:02 +02:00
|
|
|
if kind in ['project']:
|
2009-06-09 19:04:31 +02:00
|
|
|
result.sort()
|
2009-06-09 19:07:02 +02:00
|
|
|
if kind in ['package']:
|
2009-06-09 19:04:31 +02:00
|
|
|
# hm... results is a flat list
|
|
|
|
l = [ (j, i) for i, j in zip(*[iter(result)]*2) ]
|
|
|
|
l.sort()
|
|
|
|
result = []
|
|
|
|
for j, i in l:
|
|
|
|
result.extend([i, j])
|
|
|
|
|
2009-06-09 19:07:02 +02:00
|
|
|
if kind == 'package':
|
|
|
|
headline = [ '# Package', '# Project' ]
|
2007-07-15 15:49:13 +02:00
|
|
|
else:
|
2009-06-09 19:07:02 +02:00
|
|
|
headline = [ '# Project' ]
|
|
|
|
if opts.verbose:
|
|
|
|
headline.append('# Title')
|
|
|
|
if opts.repos_baseurl:
|
|
|
|
headline.append('# URL')
|
|
|
|
if not opts.csv:
|
|
|
|
if len(search_for) > 1:
|
|
|
|
print '#' * 68
|
|
|
|
print 'matches for \'%s\' in %ss:\n' % (search_term, kind)
|
|
|
|
for row in build_table(len(headline), result, headline, 2, csv = opts.csv):
|
|
|
|
print row
|
2007-06-29 20:26:30 +02:00
|
|
|
|
2007-07-25 12:56:04 +02:00
|
|
|
|
2007-07-23 18:03:30 +02:00
|
|
|
@cmdln.option('-p', '--project', metavar='project',
|
|
|
|
help='specify a project name')
|
|
|
|
@cmdln.option('-n', '--name', metavar='name',
|
|
|
|
help='specify a package name')
|
|
|
|
@cmdln.option('-t', '--title', metavar='title',
|
|
|
|
help='set a title')
|
|
|
|
@cmdln.option('-d', '--description', metavar='description',
|
|
|
|
help='set the description of the package')
|
2007-07-30 13:12:42 +02:00
|
|
|
@cmdln.option('', '--delete-old-files', action='store_true',
|
|
|
|
help='delete existing files from the server')
|
2007-07-30 20:11:52 +02:00
|
|
|
@cmdln.option('-c', '--commit', action='store_true',
|
2007-08-08 17:44:14 +02:00
|
|
|
help='commit the new files')
|
2007-07-25 14:14:32 +02:00
|
|
|
def do_importsrcpkg(self, subcmd, opts, srpm):
|
2007-12-10 15:23:58 +01:00
|
|
|
"""${cmd_name}: Import a new package from a src.rpm
|
2007-07-23 18:03:30 +02:00
|
|
|
|
|
|
|
A new package dir will be created inside the project dir
|
|
|
|
(if no project is specified and the current working dir is a
|
|
|
|
project dir the package will be created in this project). If
|
|
|
|
the package does not exist on the server it will be created
|
|
|
|
too otherwise the meta data of the existing package will be
|
|
|
|
updated (<title /> and <description />).
|
2008-11-29 14:32:25 +01:00
|
|
|
The src.rpm will be extracted into the package dir. The files
|
|
|
|
won't be committed unless you explicitly pass the --commit switch.
|
2007-07-23 18:03:30 +02:00
|
|
|
|
2007-07-25 14:21:46 +02:00
|
|
|
SRPM is the path of the src.rpm in the local filesystem,
|
|
|
|
or an URL.
|
|
|
|
|
2007-07-25 14:14:32 +02:00
|
|
|
${cmd_usage}
|
2007-07-23 18:03:30 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
import glob
|
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
if opts.delete_old_files and conf.config['do_package_tracking']:
|
|
|
|
# IMHO the --delete-old-files option doesn't really fit into our
|
|
|
|
# package tracking strategy
|
|
|
|
print >>sys.stderr, '--delete-old-files is not supported anymore'
|
|
|
|
print >>sys.stderr, 'when do_package_tracking is enabled'
|
|
|
|
sys.exit(1)
|
|
|
|
|
2007-07-25 14:21:46 +02:00
|
|
|
if '://' in srpm:
|
|
|
|
print 'trying to fetch', srpm
|
|
|
|
import urlgrabber
|
|
|
|
urlgrabber.urlgrab(srpm)
|
|
|
|
srpm = os.path.basename(srpm)
|
|
|
|
|
2007-07-25 14:14:32 +02:00
|
|
|
srpm = os.path.abspath(srpm)
|
2008-03-15 23:51:37 +01:00
|
|
|
if not os.path.isfile(srpm):
|
|
|
|
print >>sys.stderr, 'file \'%s\' does not exist' % srpm
|
|
|
|
sys.exit(1)
|
2007-07-23 18:03:30 +02:00
|
|
|
|
|
|
|
if opts.project:
|
|
|
|
project_dir = opts.project
|
|
|
|
else:
|
2008-03-10 19:04:23 +01:00
|
|
|
project_dir = os.curdir
|
2007-07-23 18:03:30 +02:00
|
|
|
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
if conf.config['do_package_tracking']:
|
|
|
|
project = Project(project_dir)
|
2007-07-23 18:03:30 +02:00
|
|
|
else:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
project = store_read_project(project_dir)
|
2007-07-23 18:03:30 +02:00
|
|
|
|
2009-01-21 22:55:53 +01:00
|
|
|
rpm_data = data_from_rpm(srpm, 'Name:', 'Summary:', '%description', 'Url:')
|
2007-07-29 17:27:27 +02:00
|
|
|
if rpm_data:
|
2009-01-21 22:55:53 +01:00
|
|
|
title, pac, descr, url = ( v for k, v in rpm_data.iteritems() )
|
2007-07-29 17:27:27 +02:00
|
|
|
else:
|
2009-01-21 22:55:53 +01:00
|
|
|
title = pac = descr = url = ''
|
2007-07-23 18:03:30 +02:00
|
|
|
|
|
|
|
if opts.title:
|
|
|
|
title = opts.title
|
|
|
|
if opts.name:
|
|
|
|
pac = opts.name
|
|
|
|
if opts.description:
|
|
|
|
descr = opts.description
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-07-29 17:27:27 +02:00
|
|
|
# title and description can be empty
|
|
|
|
if not pac:
|
|
|
|
print >>sys.stderr, 'please specify a package name with the \'--name\' option. ' \
|
|
|
|
'The automatic detection failed'
|
|
|
|
sys.exit(1)
|
|
|
|
|
2008-03-10 19:04:23 +01:00
|
|
|
olddir = os.getcwd()
|
2008-03-15 23:51:37 +01:00
|
|
|
if conf.config['do_package_tracking']:
|
|
|
|
if createPackageDir(os.path.join(project.dir, pac), project):
|
|
|
|
os.chdir(os.path.join(project.dir, pac))
|
2007-07-23 18:03:30 +02:00
|
|
|
else:
|
2008-03-15 23:51:37 +01:00
|
|
|
sys.exit(1)
|
|
|
|
else:
|
|
|
|
if not os.path.exists(os.path.join(project_dir, pac)):
|
|
|
|
apiurl = store_read_apiurl(project_dir)
|
|
|
|
user = conf.get_apiurl_usr(apiurl)
|
2008-03-10 19:04:23 +01:00
|
|
|
data = meta_exists(metatype='pkg',
|
|
|
|
path_args=(quote_plus(project), quote_plus(pac)),
|
|
|
|
template_args=({
|
|
|
|
'name': pac,
|
2008-03-15 23:51:37 +01:00
|
|
|
'user': user}), apiurl=apiurl)
|
2008-03-10 19:04:23 +01:00
|
|
|
if data:
|
|
|
|
data = ET.fromstring(''.join(data))
|
|
|
|
data.find('title').text = title
|
|
|
|
data.find('description').text = ''.join(descr)
|
2009-01-21 22:55:53 +01:00
|
|
|
data.find('url').text = url
|
2008-03-10 19:04:23 +01:00
|
|
|
data = ET.tostring(data)
|
|
|
|
else:
|
|
|
|
print >>sys.stderr, 'error - cannot get meta data'
|
|
|
|
sys.exit(1)
|
|
|
|
edit_meta(metatype='pkg',
|
|
|
|
path_args=(quote_plus(project), quote_plus(pac)),
|
2008-03-15 23:51:37 +01:00
|
|
|
data = data, apiurl=apiurl)
|
|
|
|
os.mkdir(os.path.join(project_dir, pac))
|
|
|
|
os.chdir(os.path.join(project_dir, pac))
|
|
|
|
init_package_dir(apiurl, project, pac, os.path.join(project, pac))
|
2007-07-30 13:12:42 +02:00
|
|
|
else:
|
2008-03-15 23:51:37 +01:00
|
|
|
print >>sys.stderr, 'error - local package already exists'
|
2007-07-30 13:12:42 +02:00
|
|
|
sys.exit(1)
|
2008-03-15 23:51:37 +01:00
|
|
|
|
|
|
|
unpack_srcrpm(srpm, os.getcwd())
|
|
|
|
p = Package(os.getcwd())
|
|
|
|
if len(p.filenamelist) == 0 and opts.commit:
|
|
|
|
print 'Adding files to working copy...'
|
|
|
|
addFiles(glob.glob('*'))
|
|
|
|
if conf.config['do_package_tracking']:
|
|
|
|
os.chdir(olddir)
|
|
|
|
project.commit((pac, ))
|
|
|
|
else:
|
|
|
|
p.update_datastructs()
|
|
|
|
p.commit()
|
|
|
|
elif opts.commit and opts.delete_old_files:
|
|
|
|
for file in p.filenamelist:
|
|
|
|
p.delete_remote_source_file(file)
|
|
|
|
p.update_local_filesmeta()
|
|
|
|
print 'Adding files to working copy...'
|
|
|
|
addFiles(glob.glob('*'))
|
|
|
|
p.update_datastructs()
|
|
|
|
p.commit()
|
2007-07-23 18:03:30 +02:00
|
|
|
else:
|
2008-03-15 23:51:37 +01:00
|
|
|
print 'No files were committed to the server. Please ' \
|
|
|
|
'commit them manually.'
|
|
|
|
print 'Package \'%s\' only imported locally' % pac
|
2007-07-23 18:03:30 +02:00
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
print 'Package \'%s\' imported successfully' % pac
|
2007-07-25 12:56:04 +02:00
|
|
|
|
2007-07-25 14:14:32 +02:00
|
|
|
|
2007-07-25 12:56:04 +02:00
|
|
|
@cmdln.option('-m', '--method', default='GET', metavar='HTTP_METHOD',
|
|
|
|
help='specify HTTP method to use (GET|PUT|DELETE|POST)')
|
|
|
|
@cmdln.option('-d', '--data', default=None, metavar='STRING',
|
|
|
|
help='specify string data for e.g. POST')
|
|
|
|
@cmdln.option('-f', '--file', default=None, metavar='FILE',
|
|
|
|
help='specify filename for e.g. PUT or DELETE')
|
2009-05-18 16:50:43 +02:00
|
|
|
@cmdln.option('-a', '--add-header', default=None, metavar='NAME STRING',
|
2008-03-16 21:46:16 +01:00
|
|
|
nargs=2, action='append', dest='headers',
|
|
|
|
help='add the specified header to the request')
|
2009-06-04 16:14:01 +02:00
|
|
|
def do_api(self, subcmd, opts, url):
|
2007-07-25 12:56:04 +02:00
|
|
|
"""${cmd_name}: Issue an arbitrary request to the API
|
|
|
|
|
|
|
|
Useful for testing.
|
|
|
|
|
|
|
|
URL can be specified either partially (only the path component), or fully
|
|
|
|
with URL scheme and hostname ('http://...').
|
|
|
|
|
|
|
|
Note the global -A and -H options (see osc help).
|
|
|
|
|
|
|
|
Examples:
|
2009-06-04 16:14:01 +02:00
|
|
|
osc api /source/home:user
|
|
|
|
osc api -m PUT -f /etc/fstab source/home:user/test5/myfstab
|
2007-07-25 12:56:04 +02:00
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
if not opts.method in ['GET', 'PUT', 'POST', 'DELETE']:
|
|
|
|
sys.exit('unknown method %s' % opts.method)
|
|
|
|
|
|
|
|
if not url.startswith('http'):
|
|
|
|
if not url.startswith('/'):
|
|
|
|
url = '/' + url
|
|
|
|
url = conf.config['apiurl'] + url
|
|
|
|
|
2008-03-16 21:46:16 +01:00
|
|
|
if opts.headers:
|
|
|
|
opts.headers = dict(opts.headers)
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
r = http_request(opts.method,
|
|
|
|
url,
|
|
|
|
data=opts.data,
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
file=opts.file,
|
2009-05-18 16:50:43 +02:00
|
|
|
headers=opts.headers)
|
2007-07-25 12:56:04 +02:00
|
|
|
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
out = r.read()
|
2007-07-25 12:56:04 +02:00
|
|
|
sys.stdout.write(out)
|
|
|
|
|
|
|
|
|
2009-06-18 18:20:49 +02:00
|
|
|
@cmdln.option('-b', '--bugowner', action='store_true',
|
|
|
|
help='Show only the bugowner')
|
2007-09-03 12:17:26 +02:00
|
|
|
@cmdln.option('-e', '--email', action='store_true',
|
|
|
|
help='show email addresses instead of user names')
|
2009-06-18 18:20:49 +02:00
|
|
|
@cmdln.option('--nodevelproject', action='store_true',
|
|
|
|
help='do not follow a defined devel project ' \
|
|
|
|
'(primary project where a package is developed)')
|
2007-09-03 18:18:37 +02:00
|
|
|
@cmdln.option('-v', '--verbose', action='store_true',
|
|
|
|
help='show more information')
|
2008-05-20 10:29:54 +02:00
|
|
|
@cmdln.option('-D', '--devel-project', metavar='devel_project',
|
|
|
|
help='define the project where this package is primarily developed')
|
2007-09-12 20:01:13 +02:00
|
|
|
@cmdln.option('-a', '--add', metavar='user',
|
|
|
|
help='add a new maintainer')
|
|
|
|
@cmdln.option('-d', '--delete', metavar='user',
|
|
|
|
help='delete a maintainer from a project or package')
|
2009-06-19 15:57:27 +02:00
|
|
|
@cmdln.option('-r', '--role', metavar='role',
|
|
|
|
help='Specify user role')
|
2007-09-03 12:17:26 +02:00
|
|
|
def do_maintainer(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Show maintainers of a project/package
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-09-03 12:17:26 +02:00
|
|
|
To be used like this:
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-09-12 20:01:13 +02:00
|
|
|
osc maintainer PRJ <options>
|
2009-05-18 16:50:43 +02:00
|
|
|
or
|
2007-09-12 20:01:13 +02:00
|
|
|
osc maintainer PRJ PKG <options>
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-09-03 12:17:26 +02:00
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-06-18 18:20:49 +02:00
|
|
|
maintainers = []
|
2007-09-12 20:01:13 +02:00
|
|
|
pac = None
|
2009-06-18 18:20:49 +02:00
|
|
|
tree = None
|
2009-06-19 15:57:27 +02:00
|
|
|
role = opts.role
|
2009-06-18 18:20:49 +02:00
|
|
|
roles = [ 'bugowner', 'maintainer' ]
|
|
|
|
if opts.bugowner:
|
|
|
|
roles = [ 'bugowner' ]
|
|
|
|
|
2007-09-03 12:17:26 +02:00
|
|
|
if len(args) == 1:
|
2007-09-12 20:01:13 +02:00
|
|
|
prj = args[0]
|
2009-06-18 18:20:49 +02:00
|
|
|
m = show_project_meta(conf.config['apiurl'], prj)
|
|
|
|
tree = ET.parse(StringIO(''.join(m)))
|
2007-09-03 12:17:26 +02:00
|
|
|
elif len(args) == 2:
|
2007-09-12 20:01:13 +02:00
|
|
|
prj = args[0]
|
|
|
|
pac = args[1]
|
2009-06-18 18:20:49 +02:00
|
|
|
m = show_package_meta(conf.config['apiurl'], prj, pac)
|
|
|
|
tree = ET.parse(StringIO(''.join(m)))
|
|
|
|
if not opts.nodevelproject and not opts.delete and not opts.add:
|
|
|
|
while tree.findall('devel'):
|
|
|
|
d = tree.find('devel')
|
|
|
|
prj = d.get('project', prj)
|
|
|
|
pac = d.get('package', pac)
|
|
|
|
print "Following to the development space:", prj, "/", pac
|
|
|
|
m = show_package_meta(conf.config['apiurl'], prj, pac)
|
|
|
|
tree = ET.parse(StringIO(''.join(m)))
|
|
|
|
if not tree.findall('person'):
|
|
|
|
print "No dedicated persons in package defined, showing the project persons !"
|
|
|
|
m = show_project_meta(conf.config['apiurl'], prj)
|
|
|
|
tree = ET.parse(StringIO(''.join(m)))
|
2007-09-03 12:17:26 +02:00
|
|
|
else:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('I need at least one argument.')
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-06-18 18:20:49 +02:00
|
|
|
if opts.add:
|
2009-06-19 15:57:27 +02:00
|
|
|
addPerson(conf.config['apiurl'], prj, pac, opts.add, role)
|
2007-09-12 20:01:13 +02:00
|
|
|
elif opts.delete:
|
2009-06-19 15:57:27 +02:00
|
|
|
delPerson(conf.config['apiurl'], prj, pac, opts.delete, role)
|
2008-05-20 10:29:54 +02:00
|
|
|
elif opts.devel_project:
|
2009-06-18 18:20:49 +02:00
|
|
|
setDevelProject(conf.config['apiurl'], prj, pac, opts.devel_project)
|
2009-06-23 12:06:31 +02:00
|
|
|
else:
|
2009-06-18 18:20:49 +02:00
|
|
|
# showing the maintainers
|
|
|
|
for role in roles:
|
|
|
|
print ""
|
|
|
|
print role, ":"
|
|
|
|
for person in tree.findall('person'):
|
|
|
|
if person.get('role') == role:
|
|
|
|
maintainers.append(person.get('userid'))
|
2009-06-23 12:06:31 +02:00
|
|
|
|
2009-06-18 18:20:49 +02:00
|
|
|
if opts.email:
|
|
|
|
emails = []
|
|
|
|
for maintainer in maintainers:
|
|
|
|
user = get_user_data(conf.config['apiurl'], maintainer, 'email')
|
|
|
|
if user != None:
|
|
|
|
emails.append(''.join(user))
|
|
|
|
print ', '.join(emails)
|
|
|
|
elif opts.verbose:
|
|
|
|
userdata = []
|
|
|
|
for maintainer in maintainers:
|
|
|
|
user = get_user_data(conf.config['apiurl'], maintainer, 'realname', 'login', 'email')
|
|
|
|
if user != None:
|
|
|
|
for itm in user:
|
|
|
|
userdata.append(itm)
|
|
|
|
for row in build_table(3, userdata, ['realname', 'userid', 'email\n']):
|
|
|
|
print row
|
|
|
|
else:
|
|
|
|
print ', '.join(maintainers)
|
2007-09-03 12:17:26 +02:00
|
|
|
|
|
|
|
|
2008-01-15 19:58:58 +01:00
|
|
|
@cmdln.option('-r', '--revision', metavar='rev',
|
|
|
|
help='print out the specified revision')
|
2007-11-02 19:18:30 +01:00
|
|
|
def do_cat(self, subcmd, opts, *args):
|
2007-12-10 15:23:58 +01:00
|
|
|
"""${cmd_name}: Output the content of a file to standard output
|
2007-07-25 12:56:04 +02:00
|
|
|
|
2007-11-02 19:18:30 +01:00
|
|
|
Examples:
|
|
|
|
osc cat project package file
|
|
|
|
osc cat project/package/file
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
args = slash_split(args)
|
|
|
|
if len(args) != 3:
|
Merged revisions 3774-3775,3779,3781-3782,3787,3789-3793,3798,3802,3805,3817-3822,3827,3829-3830,3837-3839,3841-3842,3848-3850 via svnmerge from
https://forgesvn1.novell.com/svn/opensuse/branches/buildservice/osc-exception-handling
........
r3774 | poeml | 2008-04-22 17:39:45 +0200 (Tue, 22 Apr 2008) | 3 lines
A first draft on implement systematic exception handling:
Add errors.py with some exceptions defined, and babysitter.py to handle them
........
r3775 | poeml | 2008-04-22 22:34:12 +0200 (Tue, 22 Apr 2008) | 9 lines
- new global options:
--debugger jump into the debugger before executing anything
--post-mortem jump into the debugger in case of errors
-t, --traceback print call trace in case of errors
- traceback and post_mortem can also be set in .oscrc.
- catch more errors (HTTPError).
- make config accessible from outside of the Osc instance, by making it a class
attribute
........
r3779 | poeml | 2008-04-23 00:55:49 +0200 (Wed, 23 Apr 2008) | 5 lines
- new global option:
-d, --debug print info useful for debugging
- catch some more errors (HTTPError), with OscHTTPError which isn't very
advanced yet.
........
r3781 | Marcus_H | 2008-04-23 01:02:00 +0200 (Wed, 23 Apr 2008) | 2 lines
- added OscConfigError class (just for testing).
- small change in the signature of the OscBaseError constructor (actually we should get rid of the 'args' tuple because it will be deprecated sooner or later
........
r3782 | Marcus_H | 2008-04-23 02:02:13 +0200 (Wed, 23 Apr 2008) | 2 lines
- access the prg.conf.config dict in a save way - this way we avoid AttributeErrors if the prg.conf.config dict doesn't exist
- in case of an configparser error we have to use the prg.options object directly (this was removed in r3781 by accident)
........
r3787 | poeml | 2008-04-23 09:23:56 +0200 (Wed, 23 Apr 2008) | 4 lines
- remove local exception handling from do_req
- for HTTPError, print details (headers and response) when in debug mode
- catch AttributeError
........
r3789 | poeml | 2008-04-23 16:23:14 +0200 (Wed, 23 Apr 2008) | 4 lines
- errors: add two new classes named OscWrongOptionsError and OscWrongArgsError
- commandline: raise instances of the new errors in a number of places
- commandline: add get_cmd_help() to Osc instance which returns the formatted help of a subcommand
........
r3790 | Marcus_H | 2008-04-23 16:48:28 +0200 (Wed, 23 Apr 2008) | 4 lines
- added 2 new exception classes: OscNoConfigfileError and OscIOError
- added new method write_config() to the conf.py module: This method writes osc's configuration file
- minor cleanups in the conf module
........
r3791 | poeml | 2008-04-23 17:11:07 +0200 (Wed, 23 Apr 2008) | 3 lines
small compatibility fix for r3790: try-except-finally isn't supported in
python-2.4.2, thus do the same as try-except inside a try-finally.
........
r3792 | poeml | 2008-04-23 17:37:53 +0200 (Wed, 23 Apr 2008) | 2 lines
fix up the remaining places regarding handling of errors related to commandline parsing
........
r3793 | poeml | 2008-04-23 17:40:34 +0200 (Wed, 23 Apr 2008) | 3 lines
raise a NoWorkingCopyError in osc.core.store_read_project() in case of an
IOError
........
r3798 | Marcus_H | 2008-04-23 23:55:24 +0200 (Wed, 23 Apr 2008) | 1 line
ported -r3797 from trunk
........
r3802 | Marcus_H | 2008-04-24 11:00:55 +0200 (Thu, 24 Apr 2008) | 1 line
ported -r3801 from trunk
........
r3805 | poeml | 2008-04-24 12:52:30 +0200 (Thu, 24 Apr 2008) | 2 lines
raise OscHTTPError in show_pattern_meta(), replacing local error handling
........
r3817 | poeml | 2008-04-24 20:21:32 +0200 (Thu, 24 Apr 2008) | 9 lines
- remove errors.OscHTTPError again.
it seems simpler to use urllib2.HTTPError instead (and just add a specific
error text message where appropriate, and re-raise)
- for 404s, check out _which_ part was not found
it is very ugly, but may be considered Good for pragmatic reasons
- removed local exception handling and workaround for returned 500's from
delete_package() and delete_project(), thereby getting rid of 4 possible exit
points.
........
r3818 | Marcus_H | 2008-04-24 22:36:17 +0200 (Thu, 24 Apr 2008) | 1 line
- this check is superfluous because every HTTPError instance has a code attribute
........
r3819 | poeml | 2008-04-25 00:39:39 +0200 (Fri, 25 Apr 2008) | 1 line
remove a forgotten debug line from core.delete_project()
........
r3820 | poeml | 2008-04-25 10:07:58 +0200 (Fri, 25 Apr 2008) | 2 lines
- ditch local error handling from wipebinaries(), rebuild(), and abortbuild()
........
r3821 | poeml | 2008-04-25 10:56:38 +0200 (Fri, 25 Apr 2008) | 2 lines
It is never needed to import the exception module.
........
r3822 | poeml | 2008-04-25 11:13:39 +0200 (Fri, 25 Apr 2008) | 4 lines
- when going into the debugger with --post-mortem, always print a traceback before
(thus implying -t)
- do not jump into the debugger if not on a TTY, or working in interactive mode
........
r3827 | poeml | 2008-04-25 13:07:46 +0200 (Fri, 25 Apr 2008) | 9 lines
- add errors.OscWorkingCopyOutdated, which takes a tuple with three args:
path to working copy, current rev, expected rev
- add handler for urllib2.URLError errors to the babysitter
- simplify the OscWrongArgsError and OscWrongOptionsError handlers, by removing
the extra line "Sorry, wrong ..." that was printed before the messages given
when the error was raised.
- remove one more errors.OscHTTPError which was still there, and raise
urllib2.HTTPError instead (show_package_meta())
........
r3829 | poeml | 2008-04-25 14:19:10 +0200 (Fri, 25 Apr 2008) | 11 lines
- comment some methods in osc.core which are used by nearly all do_* methods in
osc.commandline
- improve "is not a package/project dir" error messages, by printing the
absolute path tried, instead of '.' for the cwd
- make core.store_read_package() raise a proper NoWorkingCopyError instead of
terminating
- give attribution to things in babysitter.py copied from mercurial
- prefix HTTPError exceptions with 'Server returned an error:'
- remove obsolete local error handling from do_prjresults(), do_importsrcpkg(),
do_repos()
........
r3830 | poeml | 2008-04-25 14:29:35 +0200 (Fri, 25 Apr 2008) | 1 line
catch IOError exceptions in the babysitter
........
r3837 | poeml | 2008-04-25 17:27:36 +0200 (Fri, 25 Apr 2008) | 5 lines
- do_remotebuildlog: raise errors for wrong arguments, remove exits
- raise AttributeError in make_meta_url() instead of exiting
- delete unused method core.delete_server_files()
- replace exit call inside make_meta_url() with an AttributeError
........
r3838 | poeml | 2008-04-25 17:49:18 +0200 (Fri, 25 Apr 2008) | 1 line
simplify the check in do_checkout if a project exists, by using show_project_meta() instead of meta_exists
........
r3839 | poeml | 2008-04-25 18:31:26 +0200 (Fri, 25 Apr 2008) | 6 lines
- commandline do_checkout(): change the order of the two checks, first do the
(cheaper) check for existing directory
- core.core checkout_package(): simplify the check in if the package
exists, by using show_package_meta() instead of meta_exists
Let it throw an exception, instead of using sys.exit().
........
r3841 | Marcus_H | 2008-04-27 15:48:06 +0200 (Sun, 27 Apr 2008) | 5 lines
- added 2 new exception classes: PackageError() and PackageExistsError. The PackageError() class is meant to be the base class for all subsequent package exceptions.
- get rid of 2 sys.exit(1) calls
- make the update() method of the Project() class safer: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- minor fix in delPackage(): use getTransActPath() when printing out the filename
........
r3842 | Marcus_H | 2008-04-27 16:52:55 +0200 (Sun, 27 Apr 2008) | 3 lines
- make the commit() method safe: in any case we have to write the _packages file otherwise the package tracking will be screwed up.
- removed another sys.exit(1): raise an exception if a package is missing when doing a commit. For now we use the PackageExistsError() exception but this might change in the future (updated description of PackageExistsError() according to this change)
........
r3848 | poeml | 2008-04-28 12:46:45 +0200 (Mon, 28 Apr 2008) | 3 lines
rename several error classes, dropping the "Osc" prefix, and "Error" suffix in
cases where they don't really make sense.
........
r3849 | poeml | 2008-04-28 12:57:32 +0200 (Mon, 28 Apr 2008) | 3 lines
- rename osc.errors module to osc.oscerr, to make it easier to import it from
other programs and have a crystal clear namespace
........
r3850 | poeml | 2008-04-28 13:26:12 +0200 (Mon, 28 Apr 2008) | 2 lines
split PackageExists exception class into PackageExists and PackageMissing
........
2008-04-28 18:37:44 +02:00
|
|
|
raise oscerr.WrongArgs('Wrong number of arguments.')
|
2008-01-15 19:58:58 +01:00
|
|
|
rev, dummy = parseRevisionOption(opts.revision)
|
2007-12-10 15:23:58 +01:00
|
|
|
|
2009-04-09 17:52:59 +02:00
|
|
|
query = ''
|
|
|
|
if opts.revision:
|
|
|
|
query = 'rev=%s' % opts.revision
|
|
|
|
u = makeurl(conf.config['apiurl'], ['source', args[0], args[1], args[2]], query=query)
|
|
|
|
for data in streamfile(u):
|
|
|
|
sys.stdout.write(data)
|
2007-12-10 15:23:58 +01:00
|
|
|
|
2009-04-21 18:52:26 +02:00
|
|
|
|
|
|
|
# helper function to download a file from a specific revision
|
|
|
|
def download(self, name, md5, dir, destfile):
|
2009-05-22 17:00:31 +02:00
|
|
|
o = open(destfile, 'wb')
|
2009-04-22 11:06:13 +02:00
|
|
|
if md5 != '':
|
|
|
|
query = {'rev': dir['srcmd5']}
|
|
|
|
u = makeurl(dir['apiurl'], ['source', dir['project'], dir['package'], pathname2url(name)], query=query)
|
|
|
|
for buf in streamfile(u, http_GET, BUFSIZE):
|
|
|
|
o.write(buf)
|
|
|
|
o.close
|
2009-04-21 18:52:26 +02:00
|
|
|
|
2009-04-23 10:58:21 +02:00
|
|
|
|
2009-04-21 18:52:26 +02:00
|
|
|
@cmdln.option('-d', '--destdir', default='repairlink', metavar='DIR',
|
2009-04-22 11:06:13 +02:00
|
|
|
help='destination directory')
|
2009-04-23 10:58:21 +02:00
|
|
|
def do_repairlink(self, subcmd, opts, *args):
|
2009-04-22 11:06:13 +02:00
|
|
|
"""${cmd_name}: Repair a broken source link
|
|
|
|
|
2009-04-23 10:58:21 +02:00
|
|
|
This command checks out a package with merged source changes. It uses
|
|
|
|
a 3-way merge to resolve file conflicts. After reviewing/repairing
|
|
|
|
the merge, 'osc ci' will re-create a working source link.
|
|
|
|
|
2009-05-18 16:50:43 +02:00
|
|
|
usage:
|
2009-05-04 11:13:35 +02:00
|
|
|
* For merging conflicting changes of a checkout package:
|
2009-04-23 10:58:21 +02:00
|
|
|
osc repairlink
|
2009-05-04 11:13:35 +02:00
|
|
|
|
|
|
|
* Check out a package and merge changes:
|
2009-04-23 10:58:21 +02:00
|
|
|
osc repairlink PROJECT PACKAGE
|
|
|
|
|
2009-05-04 11:13:35 +02:00
|
|
|
* Pull conflicting changes from one project into another one:
|
|
|
|
osc repairlink PROJECT PACKAGE INTO_PROJECT [INTO_PACKAGE]
|
|
|
|
|
2009-04-22 11:06:13 +02:00
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
|
|
|
|
|
|
|
apiurl = conf.config['apiurl']
|
2009-05-07 20:43:04 +02:00
|
|
|
if len(args) >= 3 and len(args) <= 4:
|
2009-04-23 10:58:21 +02:00
|
|
|
prj = args[0]
|
2009-05-04 11:13:35 +02:00
|
|
|
package = target_package = args[1]
|
|
|
|
target_prj = args[2]
|
|
|
|
if len(args) == 4:
|
|
|
|
target_package = args[3]
|
2009-05-07 20:43:04 +02:00
|
|
|
elif len(args) == 2:
|
2009-05-04 11:13:35 +02:00
|
|
|
target_prj = prj = args[0]
|
|
|
|
target_package = package = args[1]
|
2009-05-07 20:43:04 +02:00
|
|
|
elif is_package_dir(os.getcwd()):
|
|
|
|
apiurl = store_read_apiurl(os.getcwd())
|
|
|
|
target_prj = prj = store_read_project(os.getcwd())
|
|
|
|
target_package = package = store_read_package(os.getcwd())
|
2009-04-23 10:58:21 +02:00
|
|
|
else:
|
2009-05-07 20:43:04 +02:00
|
|
|
raise oscerr.WrongArgs('Please specify project and package')
|
2009-04-22 11:06:13 +02:00
|
|
|
|
2009-04-27 12:09:38 +02:00
|
|
|
# first try stored reference, then lastworking
|
|
|
|
query = { 'rev': 'latest' }
|
2009-04-22 11:06:13 +02:00
|
|
|
u = makeurl(apiurl, ['source', prj, package], query=query)
|
|
|
|
f = http_GET(u)
|
|
|
|
root = ET.parse(f).getroot()
|
|
|
|
linkinfo = root.find('linkinfo')
|
|
|
|
if linkinfo == None:
|
|
|
|
raise oscerr.APIError('package is not a source link')
|
|
|
|
if linkinfo.get('error') == None:
|
|
|
|
raise oscerr.APIError('source link is not broken')
|
2009-04-27 12:09:38 +02:00
|
|
|
workingrev = None
|
|
|
|
|
|
|
|
baserev = linkinfo.get('baserev')
|
|
|
|
if baserev != None:
|
|
|
|
query = { 'rev': 'latest', 'linkrev': baserev }
|
|
|
|
u = makeurl(apiurl, ['source', prj, package], query=query)
|
|
|
|
f = http_GET(u)
|
|
|
|
root = ET.parse(f).getroot()
|
|
|
|
linkinfo = root.find('linkinfo')
|
|
|
|
if linkinfo.get('error') == None:
|
|
|
|
workingrev = linkinfo.get('xsrcmd5')
|
|
|
|
|
|
|
|
if workingrev == None:
|
|
|
|
query = { 'lastworking': 1 }
|
|
|
|
u = makeurl(apiurl, ['source', prj, package], query=query)
|
|
|
|
f = http_GET(u)
|
|
|
|
root = ET.parse(f).getroot()
|
|
|
|
linkinfo = root.find('linkinfo')
|
|
|
|
if linkinfo == None:
|
|
|
|
raise oscerr.APIError('package is not a source link')
|
|
|
|
if linkinfo.get('error') == None:
|
|
|
|
raise oscerr.APIError('source link is not broken')
|
|
|
|
workingrev = linkinfo.get('lastworking')
|
|
|
|
if workingrev == None:
|
|
|
|
raise oscerr.APIError('source link never worked')
|
|
|
|
print "using last working link target"
|
|
|
|
else:
|
|
|
|
print "using link target of last commit"
|
2009-04-22 11:06:13 +02:00
|
|
|
|
|
|
|
query = { 'expand': 1, 'emptylink': 1 }
|
|
|
|
u = makeurl(apiurl, ['source', prj, package], query=query)
|
|
|
|
f = http_GET(u)
|
|
|
|
meta = f.readlines()
|
|
|
|
root_new = ET.parse(StringIO(''.join(meta))).getroot()
|
2009-04-22 15:14:17 +02:00
|
|
|
dir_new = { 'apiurl': apiurl, 'project': prj, 'package': package }
|
2009-04-22 11:06:13 +02:00
|
|
|
dir_new['srcmd5'] = root_new.get('srcmd5')
|
2009-05-07 21:13:50 +02:00
|
|
|
dir_new['entries'] = [[n.get('name'), n.get('md5')] for n in root_new.findall('entry')]
|
2009-04-22 11:06:13 +02:00
|
|
|
|
2009-04-27 12:09:38 +02:00
|
|
|
query = { 'rev': workingrev }
|
2009-04-22 11:06:13 +02:00
|
|
|
u = makeurl(apiurl, ['source', prj, package], query=query)
|
|
|
|
f = http_GET(u)
|
|
|
|
root_oldpatched = ET.parse(f).getroot()
|
|
|
|
linkinfo_oldpatched = root_oldpatched.find('linkinfo')
|
|
|
|
if linkinfo_oldpatched == None:
|
2009-04-27 12:09:38 +02:00
|
|
|
raise oscerr.APIError('working rev is not a source link?')
|
2009-04-22 11:06:13 +02:00
|
|
|
if linkinfo_oldpatched.get('error') != None:
|
2009-04-27 12:09:38 +02:00
|
|
|
raise oscerr.APIError('working rev is not working?')
|
2009-04-22 15:14:17 +02:00
|
|
|
dir_oldpatched = { 'apiurl': apiurl, 'project': prj, 'package': package }
|
2009-04-22 11:06:13 +02:00
|
|
|
dir_oldpatched['srcmd5'] = root_oldpatched.get('srcmd5')
|
2009-05-07 21:13:50 +02:00
|
|
|
dir_oldpatched['entries'] = [[n.get('name'), n.get('md5')] for n in root_oldpatched.findall('entry')]
|
2009-04-22 11:06:13 +02:00
|
|
|
|
|
|
|
query = {}
|
|
|
|
query['rev'] = linkinfo_oldpatched.get('srcmd5')
|
|
|
|
u = makeurl(apiurl, ['source', linkinfo_oldpatched.get('project'), linkinfo_oldpatched.get('package')], query=query)
|
|
|
|
f = http_GET(u)
|
|
|
|
root_old = ET.parse(f).getroot()
|
2009-04-22 15:14:17 +02:00
|
|
|
dir_old = { 'apiurl': apiurl }
|
2009-04-22 11:06:13 +02:00
|
|
|
dir_old['project'] = linkinfo_oldpatched.get('project')
|
|
|
|
dir_old['package'] = linkinfo_oldpatched.get('package')
|
2009-04-22 15:14:17 +02:00
|
|
|
dir_old['srcmd5'] = root_old.get('srcmd5')
|
2009-05-07 21:13:50 +02:00
|
|
|
dir_old['entries'] = [[n.get('name'), n.get('md5')] for n in root_old.findall('entry')]
|
2009-04-22 11:06:13 +02:00
|
|
|
|
|
|
|
entries_old = dict(dir_old['entries'])
|
|
|
|
entries_oldpatched = dict(dir_oldpatched['entries'])
|
|
|
|
entries_new = dict(dir_new['entries'])
|
|
|
|
|
|
|
|
entries = {}
|
|
|
|
entries.update(entries_old)
|
|
|
|
entries.update(entries_oldpatched)
|
|
|
|
entries.update(entries_new)
|
|
|
|
|
|
|
|
destdir = opts.destdir
|
|
|
|
if os.path.isdir(destdir):
|
|
|
|
shutil.rmtree(destdir)
|
|
|
|
os.mkdir(destdir)
|
|
|
|
|
|
|
|
olddir=os.getcwd()
|
|
|
|
os.chdir(destdir)
|
2009-05-04 11:13:35 +02:00
|
|
|
init_package_dir(apiurl, target_prj, target_package, destdir, files=False)
|
2009-04-22 11:06:13 +02:00
|
|
|
os.chdir(olddir)
|
|
|
|
store_write_string(destdir, '_files', ''.join(meta));
|
|
|
|
store_write_string(destdir, '_linkrepair', '');
|
|
|
|
pac = Package(destdir)
|
|
|
|
|
|
|
|
storedir = os.path.join(destdir, store)
|
|
|
|
|
|
|
|
for name in sorted(entries.keys()):
|
|
|
|
md5_old = entries_old.get(name, '')
|
|
|
|
md5_new = entries_new.get(name, '')
|
|
|
|
md5_oldpatched = entries_oldpatched.get(name, '')
|
|
|
|
if md5_new != '':
|
|
|
|
self.download(name, md5_new, dir_new, os.path.join(storedir, name))
|
|
|
|
if md5_old == md5_new:
|
|
|
|
if md5_oldpatched == '':
|
|
|
|
pac.put_on_deletelist(name)
|
|
|
|
continue
|
|
|
|
print statfrmt(' ', name)
|
|
|
|
self.download(name, md5_oldpatched, dir_oldpatched, os.path.join(destdir, name))
|
|
|
|
continue
|
|
|
|
if md5_old == md5_oldpatched:
|
|
|
|
if md5_new == '':
|
|
|
|
continue
|
2009-04-23 10:58:21 +02:00
|
|
|
print statfrmt('U', name)
|
2009-04-22 11:06:13 +02:00
|
|
|
shutil.copy2(os.path.join(storedir, name), os.path.join(destdir, name))
|
|
|
|
continue
|
|
|
|
if md5_new == md5_oldpatched:
|
|
|
|
if md5_new == '':
|
|
|
|
continue
|
|
|
|
print statfrmt('G', name)
|
|
|
|
shutil.copy2(os.path.join(storedir, name), os.path.join(destdir, name))
|
|
|
|
continue
|
|
|
|
self.download(name, md5_oldpatched, dir_oldpatched, os.path.join(destdir, name + '.mine'))
|
|
|
|
if md5_new != '':
|
|
|
|
shutil.copy2(os.path.join(storedir, name), os.path.join(destdir, name + '.new'))
|
|
|
|
else:
|
|
|
|
self.download(name, md5_new, dir_new, os.path.join(destdir, name + '.new'))
|
|
|
|
self.download(name, md5_old, dir_old, os.path.join(destdir, name + '.old'))
|
2009-04-23 11:03:59 +02:00
|
|
|
|
|
|
|
if binary_file(os.path.join(destdir, name + '.mine')) or \
|
|
|
|
binary_file(os.path.join(destdir, name + '.old')) or \
|
|
|
|
binary_file(os.path.join(destdir, name + '.new')):
|
|
|
|
shutil.copy2(os.path.join(destdir, name + '.new'), os.path.join(destdir, name))
|
|
|
|
print statfrmt('C', name)
|
|
|
|
pac.put_on_conflictlist(name)
|
|
|
|
continue
|
|
|
|
|
2009-05-22 17:00:31 +02:00
|
|
|
o = open(os.path.join(destdir, name), 'wb')
|
2009-04-22 11:06:13 +02:00
|
|
|
code = subprocess.call(['diff3', '-m',
|
|
|
|
'-L', '.mine',
|
2009-04-21 18:52:26 +02:00
|
|
|
os.path.join(destdir, name + '.mine'),
|
2009-04-22 11:06:13 +02:00
|
|
|
'-L', '.old',
|
2009-04-21 18:52:26 +02:00
|
|
|
os.path.join(destdir, name + '.old'),
|
2009-04-22 11:06:13 +02:00
|
|
|
'-L', '.new',
|
2009-04-21 18:52:26 +02:00
|
|
|
os.path.join(destdir, name + '.new'),
|
2009-04-22 11:06:13 +02:00
|
|
|
], stdout=o)
|
|
|
|
if code == 0:
|
2009-04-23 10:58:21 +02:00
|
|
|
print statfrmt('G', name)
|
2009-04-27 12:09:38 +02:00
|
|
|
os.unlink(os.path.join(destdir, name + '.mine'))
|
|
|
|
os.unlink(os.path.join(destdir, name + '.old'))
|
|
|
|
os.unlink(os.path.join(destdir, name + '.new'))
|
2009-04-22 11:06:13 +02:00
|
|
|
elif code == 1:
|
|
|
|
print statfrmt('C', name)
|
|
|
|
pac.put_on_conflictlist(name)
|
|
|
|
else:
|
|
|
|
print statfrmt('?', name)
|
|
|
|
pac.put_on_conflictlist(name)
|
|
|
|
|
|
|
|
pac.write_deletelist()
|
|
|
|
pac.write_conflictlist()
|
|
|
|
print
|
|
|
|
print 'Please change into the \'%s\' directory,' % destdir
|
|
|
|
print 'fix the conflicts, and commit the changes.'
|
2009-04-21 18:52:26 +02:00
|
|
|
|
2009-04-20 15:40:33 +02:00
|
|
|
@cmdln.option('-m', '--message',
|
2009-04-22 16:44:17 +02:00
|
|
|
help='add MESSAGE to changes (not open an editor)')
|
|
|
|
@cmdln.option('-e', '--just-edit', action='store_true', default=False,
|
2009-04-27 12:09:38 +02:00
|
|
|
help='just open changes (cannot be used with -m)')
|
2009-04-20 15:40:33 +02:00
|
|
|
def do_vc(self, subcmd, opts, *args):
|
|
|
|
"""${cmd_name}: Edit the changes file
|
|
|
|
|
2009-04-22 16:44:17 +02:00
|
|
|
osc vc [-m MESSAGE|-e] [filename[.changes]|path [file_with_comment]]
|
2009-04-20 15:40:33 +02:00
|
|
|
If no <filename> is given, exactly one *.changes or *.spec file has to
|
|
|
|
be in the cwd or in path.
|
|
|
|
|
|
|
|
The email adress used in .changes file is read from BuildService
|
|
|
|
instance, or should be defined in ~/.oscrc
|
|
|
|
[https://api.opensuse.org/]
|
|
|
|
user = login
|
|
|
|
pass = password
|
|
|
|
email = user@defined.email
|
|
|
|
|
|
|
|
or can be specified via mailaddr environment variable.
|
|
|
|
|
|
|
|
${cmd_usage}
|
|
|
|
${cmd_option_list}
|
|
|
|
"""
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-04-20 15:40:33 +02:00
|
|
|
from subprocess import Popen, PIPE
|
|
|
|
|
2009-04-22 16:44:17 +02:00
|
|
|
if not os.path.exists('/usr/lib/build/vc'):
|
2009-04-20 15:40:33 +02:00
|
|
|
print >>sys.stderr, 'Error: you need build.rpm with version 2009.04.17 or newer'
|
|
|
|
print >>sys.stderr, 'See http://download.opensuse.org/repositories/openSUSE:/Tools/'
|
|
|
|
return 1
|
|
|
|
|
2009-04-22 16:44:17 +02:00
|
|
|
cmd_list = ["/usr/lib/build/vc", ]
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-04-20 15:40:33 +02:00
|
|
|
if len(args) > 0:
|
|
|
|
arg = args[0]
|
|
|
|
else:
|
|
|
|
arg = ""
|
|
|
|
|
|
|
|
# set user's email if no mailaddr exists
|
|
|
|
if not os.environ.has_key('mailaddr'):
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2009-04-20 15:40:33 +02:00
|
|
|
if arg and is_package_dir(arg):
|
|
|
|
apiurl = store_read_apiurl(arg)
|
|
|
|
elif is_package_dir(os.getcwd()):
|
|
|
|
apiurl = store_read_apiurl(os.getcwd())
|
|
|
|
else:
|
|
|
|
apiurl = conf.config['apiurl']
|
|
|
|
|
2009-04-22 19:38:14 +02:00
|
|
|
user = conf.get_apiurl_usr(apiurl)
|
2009-04-20 15:40:33 +02:00
|
|
|
|
|
|
|
if conf.config['api_host_options'][apiurl].has_key('email'):
|
|
|
|
os.environ['mailaddr'] = conf.config['api_host_options'][apiurl]['email']
|
|
|
|
else:
|
|
|
|
os.environ['mailaddr'] = get_user_data(apiurl, user, 'email')[0]
|
|
|
|
|
|
|
|
if opts.message:
|
|
|
|
cmd_list.append("-m")
|
2009-06-01 14:16:17 +02:00
|
|
|
cmd_list.append(opts.message)
|
2009-04-20 15:40:33 +02:00
|
|
|
|
2009-04-22 16:44:17 +02:00
|
|
|
if opts.just_edit:
|
|
|
|
cmd_list.append("-e")
|
|
|
|
|
2009-06-01 14:20:53 +02:00
|
|
|
if args:
|
|
|
|
cmd_list.extend(args)
|
2009-04-20 15:40:33 +02:00
|
|
|
|
|
|
|
vc = Popen(cmd_list)
|
|
|
|
vc.wait()
|
|
|
|
sys.exit(vc.returncode)
|
|
|
|
|
2007-07-25 12:56:04 +02:00
|
|
|
# fini!
|
|
|
|
###############################################################################
|
2009-05-18 16:50:43 +02:00
|
|
|
|
2007-06-29 20:26:30 +02:00
|
|
|
# load subcommands plugged-in locally
|
2009-05-05 16:21:56 +02:00
|
|
|
plugin_dirs = [
|
2009-05-18 16:50:43 +02:00
|
|
|
'/usr/lib/osc-plugins',
|
|
|
|
'/usr/local/lib/osc-plugins',
|
2009-05-05 16:21:56 +02:00
|
|
|
'/var/lib/osc-plugins', # Kept for backward compatibility
|
|
|
|
os.path.expanduser('~/.osc-plugins')]
|
2007-06-29 20:26:30 +02:00
|
|
|
for plugin_dir in plugin_dirs:
|
|
|
|
if os.path.isdir(plugin_dir):
|
|
|
|
for extfile in os.listdir(plugin_dir):
|
|
|
|
if not extfile.endswith('.py'):
|
|
|
|
continue
|
|
|
|
exec open(os.path.join(plugin_dir, extfile))
|
|
|
|
|
2006-04-20 16:26:50 +02:00
|
|
|
|