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,
2009-08-20 21:28:05 +02:00
# either version 2, or version 3 (at your option).
2006-04-20 16:26:50 +02:00
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-09-04 19:48:53 +02:00
optparser . add_option ( ' --no-keyring ' , action = ' store_true ' ,
help = ' disable usage of desktop keyring system ' )
2009-05-11 09:46:01 +02:00
optparser . add_option ( ' --no-gnome-keyring ' , action = ' store_true ' ,
help = ' disable usage of GNOME Keyring ' )
2009-08-20 21:28:05 +02:00
optparser . add_option ( ' -v ' , ' --verbose ' , dest = ' verbose ' , action = ' count ' , default = 0 ,
help = ' increase verbosity ' )
optparser . add_option ( ' -q ' , ' --quiet ' , dest = ' verbose ' , action = ' store_const ' , const = - 1 ,
help = ' be quiet, not verbose ' )
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 ,
2009-09-04 19:48:53 +02:00
override_no_keyring = self . options . no_keyring ,
2009-08-20 21:28:05 +02:00
override_no_gnome_keyring = self . options . no_gnome_keyring ,
override_verbose = self . options . 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
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
2009-08-20 21:28:05 +02:00
self . options . verbose = conf . config [ ' verbose ' ]
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
2009-08-21 16:55:26 +02:00
# overridden from class Cmdln() to use config variables in help texts
def _help_preprocess ( self , help , cmdname ) :
help = cmdln . Cmdln . _help_preprocess ( self , help , cmdname )
2009-08-21 02:42:51 +02:00
return help % conf . config
2006-04-20 16:26:50 +02:00
2009-08-21 16:55:26 +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 ' )
2009-08-20 21:28:05 +02:00
@cmdln.alias ( ' ll ' )
@cmdln.alias ( ' lL ' )
@cmdln.alias ( ' LL ' )
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-08-20 21:28:05 +02:00
@cmdln.option ( ' -l ' , ' --long ' , action = ' store_true ' , dest = ' verbose ' ,
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
2009-08-20 21:28:05 +02:00
ls - l Apache apache2 # verbosely list source files of package
ll Apache apache2 # verbosely list source files of package
LL Apache apache2 # verbosely list source files of expanded link
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 )
2009-08-21 21:39:12 +02:00
if subcmd == ' ll ' :
opts . verbose = True
if subcmd == ' lL ' or subcmd == ' LL ' :
opts . verbose = True
opts . expand = True
2007-06-26 15:17:38 +02:00
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 '
2009-09-08 10:14:27 +02:00
' You can list repositories with: \' osc repositories <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 :
2009-08-20 21:28:05 +02:00
if self . options . verbose :
print >> sys . stderr , ' 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 :
2009-08-20 21:28:05 +02:00
out = [ ' %s %7s %9d %s %s ' % ( i . md5 , i . rev , i . size , shorttime ( i . mtime ) , i . name ) \
2008-11-20 13:56:16 +01:00
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-09-05 15:46:55 +02:00
@cmdln.option ( ' --cleanup ' , action = ' store_true ' ,
help = ' remove package if submission gets accepted (default for home:<id>:branch projects) ' )
@cmdln.option ( ' --no-cleanup ' , action = ' store_true ' ,
help = ' never remove source package on accept, but update its content ' )
@cmdln.option ( ' --no-update ' , action = ' store_true ' ,
help = ' never touch source package on accept (will break source links) ' )
2009-08-28 09:33:16 +02:00
@cmdln.option ( ' -d ' , ' --diff ' , action = ' store_true ' ,
help = ' show diff only instead of creating the actual request ' )
2009-09-03 19:28:27 +02:00
@cmdln.option ( ' -l ' , ' --list ' , action = ' store_true ' ,
help = ' show submitrequests. Same as \' osc req list -M -a -t submit -D 0 \' ' )
2008-07-09 22:38:49 +02:00
@cmdln.alias ( " sr " )
2009-06-02 16:57:42 +02:00
@cmdln.alias ( " submitreq " )
2009-08-20 21:28:05 +02:00
@cmdln.alias ( " submitpac " )
2009-06-02 16:57:42 +02:00
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-09-03 19:28:27 +02:00
if opts . list :
2009-09-03 20:08:43 +02:00
opts . state = " "
opts . user = " "
opts . all = True
opts . brief = False
opts . unified = False
opts . type = " submit "
opts . mine = True
opts . days = conf . config [ ' request_list_days ' ]
return self . do_request ( ' list ' , opts , * args )
2009-09-03 19:28:27 +02:00
2009-09-05 15:46:55 +02:00
flags = None
# we should check here for home:<id>:branch and default to update, but that would require OBS 1.7 server
if opts . cleanup :
flags = " cleanup "
elif opts . no_cleanup :
flags = " update "
elif opts . no_update :
flags = " noupdate "
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 :
2009-09-03 19:28:27 +02:00
print " ************************************************************************ "
print " * WARNING: It looks that you are using this command with a * "
print " * deprecated syntax (maybe) ! * "
print " * Please run \" osc sr --help \" and \" osc req --help \" * "
print " * to see the new syntax. * "
print " * E.g. \" osc sr -l \" is shortcut for \" osc req list -M -a -t submit -D 0 \" * "
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-08-28 09:33:16 +02:00
if opts . diff :
print ' old: %s / %s \n new: %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) ' )
if not opts . message :
opts . message = edit_message ( )
result = create_submit_request ( apiurl ,
src_project , src_package ,
dst_project , dst_package ,
2009-09-05 15:46:55 +02:00
opts . message , orev = opts . revision , flags = flags )
2009-08-28 09:33:16 +02:00
if repl == ' y ' :
for req in myreqs :
change_request_state ( apiurl , str ( req . reqid ) , ' revoked ' ,
' superseeded 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-08-07 11:25:34 +02:00
if len ( args ) < 1 :
raise oscerr . WrongArgs ( ' Please specify at least a project. ' )
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 ]
2009-08-19 13:28:16 +02:00
if not opts . message :
opts . message = edit_message ( )
2009-06-02 16:57:42 +02:00
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 ]
2009-08-19 13:28:16 +02:00
if not opts . message :
opts . message = edit_message ( )
2009-06-02 16:57:42 +02:00
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-08-19 15:00:22 +02:00
@cmdln.option ( ' -a ' , ' --all ' , action = ' store_true ' ,
2009-08-20 21:28:05 +02:00
help = ' all states. Same as \' -s all \' ' )
@cmdln.option ( ' -s ' , ' --state ' , default = ' ' , # default is 'all' if no args given, 'new' otherwise
2009-09-01 17:44:57 +02:00
help = ' only list requests in one of the comma separated given states (new/accepted/revoked/declined) or " all " [default=new, or all, if no args given] ' )
2009-08-21 02:42:51 +02:00
@cmdln.option ( ' -D ' , ' --days ' , metavar = ' DAYS ' ,
help = ' only list requests created or changed in the last DAYS. [default= %(request_list_days)s ] ' )
2009-08-20 21:28:05 +02:00
@cmdln.option ( ' -U ' , ' --user ' , metavar = ' USER ' ,
help = ' same as -M, but for the specified USER ' )
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 " )
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
2009-09-03 19:28:27 +02:00
To send low level requests to the buildservice API , use :
osc api
2009-06-02 16:57:42 +02:00
This command has the following sub commands :
2008-03-05 00:41:00 +01:00
2009-08-20 21:28:05 +02:00
" list " lists open requests attached to a project or package or person .
Uses the project / package of the current directory if none of
- M , - U USER , project / package are given .
2008-03-05 00:41:00 +01:00
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
2009-09-03 19:28:27 +02:00
used with the - - diff option . The keyword show can be ommitted if the ID is numeric .
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-08-20 21:28:05 +02:00
osc request list [ - M ] [ - U USER ] [ - s state ] [ - D DAYS ] [ - t type ] [ PRJ [ PKG ] ]
2009-06-02 15:14:46 +02:00
osc request log ID
2009-09-03 19:28:27 +02:00
osc request [ show ] [ - d ] [ - b ] ID
2009-06-02 15:14:46 +02:00
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-08-21 23:31:45 +02:00
if opts . all and opts . state :
raise oscerr . WrongOptions ( ' Sorry, the options --all and --state ' \
' are mutually exclusive. ' )
if opts . mine and opts . user :
raise oscerr . WrongOptions ( ' Sorry, the options --user and --mine ' \
' are mutually exclusive. ' )
2009-08-20 21:28:05 +02:00
# 'req' defaults to 'req list -M -s all'
2009-09-03 19:28:27 +02:00
if args and args [ 0 ] . isdigit ( ) :
args = [ ' show ' , args [ 0 ] ]
2009-08-20 21:28:05 +02:00
if not args :
args = [ ' list ' ]
opts . mine = 1
if opts . state == ' ' :
opts . state = ' all '
if opts . state == ' ' :
opts . state = ' new '
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-08-20 21:28:05 +02:00
if subcmd == ' req ' :
print >> sys . stderr , ' You may want to try " osc api " instead of " osc req " . '
2009-09-03 19:28:27 +02:00
raise oscerr . WrongArgs ( ' Unknown request action %s . Choose one of %s . ' \
% ( args [ 0 ] , ' , ' . 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-08-21 03:26:37 +02:00
elif not opts . mine and not opts . user :
2009-05-15 17:32:15 +02:00
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 ' :
2009-09-01 17:44:57 +02:00
states = ( ' new ' , ' accepted ' , ' revoked ' , ' declined ' )
2008-08-04 15:20:29 +02:00
state_list = opts . state . split ( ' , ' )
2009-08-20 21:28:05 +02:00
if opts . state == ' all ' :
2009-08-21 23:31:45 +02:00
state_list = [ ' all ' ]
else :
for s in state_list :
if not s in states :
raise oscerr . WrongArgs ( ' Unknown state \' %s \' , try one of %s ' % ( s , ' , ' . join ( states ) ) )
2009-05-17 15:07:55 +02:00
who = ' '
if opts . mine :
who = conf . get_apiurl_usr ( apiurl )
2009-08-20 21:28:05 +02:00
if opts . user :
who = opts . user
2009-08-19 15:00:22 +02:00
if opts . all :
2009-08-21 23:31:45 +02:00
state_list = [ ' all ' ]
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 )
2009-08-20 21:28:05 +02:00
import time
2009-08-21 02:42:51 +02:00
days = opts . days or conf . config [ ' request_list_days ' ]
since = ' '
2009-08-20 21:28:05 +02:00
try :
2009-08-21 02:42:51 +02:00
days = int ( days )
except ValueError :
days = 0
if days > 0 :
since = time . strftime ( ' % Y- % m- %d T % H: % M: % S ' , time . localtime ( time . time ( ) - days * 24 * 3600 ) )
2008-06-27 18:36:36 +02:00
2009-08-20 21:28:05 +02:00
skipped = 0
## bs has received 2009-09-20 a new xquery compare() function
## which allows us to limit the list inside of get_request_list
## That would be much faster for coolo. But counting the remainder
## is not possible with current xquery implementation.
2009-09-03 13:25:12 +02:00
## FIXME: date filtering should become implemented on server side
2008-03-05 00:41:00 +01:00
for result in results :
2009-08-21 02:42:51 +02:00
if days == 0 or result . state . when > since :
2009-08-20 21:28:05 +02:00
print result . list_view ( )
else :
skipped + = 1
if skipped :
2009-08-21 02:42:51 +02:00
print " There are %d requests older than %s days. \n " % ( skipped , days )
2009-08-20 21:28:05 +02:00
2008-03-05 00:41:00 +01:00
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
2009-08-19 13:28:16 +02:00
else :
if not opts . message :
opts . message = edit_message ( )
# decline
if cmd == ' decline ' :
r = change_request_state ( conf . config [ ' apiurl ' ] ,
reqid , ' declined ' , opts . message or ' ' )
print r
# accept
elif cmd == ' accept ' :
r = change_request_state ( conf . config [ ' apiurl ' ] ,
reqid , ' accepted ' , opts . message or ' ' )
print r
# delete/wipe
elif cmd == ' wipe ' :
r = change_request_state ( conf . config [ ' apiurl ' ] ,
reqid , ' deleted ' , opts . message or ' ' )
print r
# revoke
elif cmd == ' revoke ' :
r = change_request_state ( conf . config [ ' apiurl ' ] ,
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
2009-07-31 16:31:20 +02:00
@cmdln.option ( ' -m ' , ' --map-repo ' , metavar = ' SRC=TARGET[,SRC=TARGET] ' ,
help = ' Allows repository mapping(s) to be given as SRC=TARGET[,SRC=TARGET] ' )
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
2009-07-31 16:31:20 +02:00
repo_map = { }
if opts . map_repo :
for pair in opts . map_repo . split ( ' , ' ) :
src_tgt = pair . split ( ' = ' )
if len ( src_tgt ) != 2 :
print >> sys . stderr , ' map " %s " must be SRC=TARGET[,SRC=TARGET] ' % opts . map_repo
return 1
repo_map [ src_tgt [ 0 ] ] = src_tgt [ 1 ]
aggregate_pac ( src_project , src_package , dst_project , dst_package , repo_map )
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 ' ,
2009-08-20 21:28:05 +02:00
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 :
2009-08-20 21:28:05 +02:00
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
2009-08-20 21:28:05 +02:00
@cmdln.alias ( ' branchco ' )
@cmdln.alias ( ' bco ' )
@cmdln.alias ( ' getpac ' )
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 ' ,
2009-08-20 21:28:05 +02:00
help = ' Checkout branched package afterwards ' \
' ( \' osc bco \' is a shorthand for this option) ' )
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
2009-09-03 20:08:43 +02:00
With getpac or bco , the branched package will come from
2009-09-03 23:32:36 +02:00
% ( getpac_default_project ) s
2009-09-03 20:08:43 +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
2009-09-03 20:08:43 +02:00
osc getpac SOURCEPACKAGE
2009-08-20 21:28:05 +02:00
osc bco . . .
2008-05-21 17:49:00 +02:00
$ { cmd_option_list }
"""
2009-09-03 20:08:43 +02:00
if subcmd == ' getpac ' or subcmd == ' branchco ' or subcmd == ' bco ' : opts . checkout = True
2008-10-16 14:34:41 +02:00
args = slash_split ( args )
2009-04-17 14:02:02 +02:00
tproject = tpackage = None
2009-08-20 21:28:05 +02:00
2009-09-03 23:32:36 +02:00
if ( subcmd == ' getpac ' or subcmd == ' bco ' ) and len ( args ) == 1 :
print >> sys . stderr , ' defaulting to %s / %s ' % ( conf . config [ ' getpac_default_project ' ] , args [ 0 ] )
2009-09-03 20:08:43 +02:00
# python has no args.unshift ???
args = [ conf . config [ ' getpac_default_project ' ] , args [ 0 ] ]
2009-04-17 14:02:02 +02:00
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-08-20 21:28:05 +02:00
nodevelproject = opts . nodevelproject , rev = opts . revision ,
target_project = tproject , target_package = tpackage ,
return_existing = opts . checkout )
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-08-20 21:28:05 +02:00
if r [ 0 ] is None :
r = expected = r [ 1 ]
print >> sys . stderr , ' Using existing branch project: ' , r , ' \n '
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 ' \n Note: 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 )
2009-08-20 21:28:05 +02:00
if conf . config [ ' verbose ' ] :
print ' Note: You can use " osc delete " or " osc submitpac " when done. \n '
2009-04-17 14:02:02 +02:00
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 %s co %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 ' ,
2009-08-20 21:28:05 +02:00
help = ' deletes a package or an empty project ' )
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-09-07 20:49:01 +02:00
@cmdln.option ( ' -p ' , ' --plain ' , action = ' store_true ' ,
help = ' output the diff in plain (not unified) 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 :
2009-09-07 20:49:01 +02:00
print >> sys . stderr , ' Revision \' %s \' not an integer ' % opts . change
2009-05-18 16:50:43 +02:00
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-09-07 20:49:01 +02:00
pac . prjname , pac . name , rev2 , not opts . plain )
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-09-07 20:49:01 +02:00
@cmdln.option ( ' -p ' , ' --plain ' , action = ' store_true ' ,
help = ' output the diff in plain (not unified) diff format ' )
@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-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 }
"""
2009-09-07 20:49:01 +02:00
rev1 = None
rev2 = None
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 :
print >> sys . stderr , ' Revision \' %s \' not an integer ' % opts . change
return
else :
if opts . revision :
rev1 , rev2 = parseRevisionOption ( opts . revision )
2007-11-29 18:22:57 +01:00
2009-01-16 15:43:45 +01:00
rdiff = server_diff ( conf . config [ ' apiurl ' ] ,
2009-09-07 20:49:01 +02:00
opts . oldprj , opts . oldpkg , rev1 ,
new_project , new_package , rev2 , not opts . plain )
2007-11-29 18:22:57 +01:00
print rdiff
2009-08-20 21:28:05 +02:00
def do_install ( self , subcmd , opts , * args ) :
""" $ {cmd_name} : install a package after build via zypper in -r
Not implemented yet . Use osc repourls ,
select the url you best like ( standard ) ,
chop off after the last / , this should work with zypper .
$ { cmd_usage }
$ { cmd_option_list }
"""
print self . do_install . __doc__
2007-11-29 18:22:57 +01:00
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 :
2009-09-08 10:14:27 +02:00
repositories = get_repositories_of_project ( p . apiurl , p . prjname )
for repository in repositories :
print url_tmpl % ( p . prjname . replace ( ' : ' , ' :/ ' ) , repository , 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 ' )
2009-08-07 14:18:15 +02:00
@cmdln.option ( ' -s ' , ' --source-service-files ' , action = ' store_true ' ,
help = ' server side generated files of source services ' \
' gets downloaded as well ' )
2009-04-16 19:41:47 +02:00
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
2009-09-03 16:56:48 +02:00
if opts . source_service_files : service_files = True
else : service_files = False
2008-06-06 14:04:34 +02:00
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-09-03 16:56:48 +02:00
rev , expand_link = expand_link , prj_dir = project_dir , service_files = service_files )
2007-04-25 01:00:12 +02:00
elif project :
2009-05-15 13:40:50 +02:00
prj_dir = project
2009-09-08 10:14:27 +02:00
if sys . repository [ : 3 ] == ' win ' :
2009-05-15 13:40:50 +02:00
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-09-03 16:56:48 +02:00
expand_link = expand_link , prj_dir = prj_dir , service_files = service_files )
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-09-03 16:56:48 +02:00
expand_link = False , prj_dir = prj_dir , service_files = service_files )
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
2009-08-20 21:28:05 +02:00
2007-04-25 01:00:12 +02:00
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 :
2009-08-20 21:28:05 +02:00
continue
2007-04-25 01:00:12 +02:00
state = p . status ( filename )
2009-08-20 21:28:05 +02:00
2007-04-25 01:00:12 +02:00
if state == ' ? ' :
2009-08-20 21:28:05 +02:00
# TODO: should ignore typical backup files suffix ~ or .orig
2007-04-25 01:00:12 +02:00
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 ' )
2009-08-03 15:03:24 +02:00
@cmdln.option ( ' -f ' , ' --force ' , default = False , action = " store_true " ,
help = ' force commit - do not tests a file list ' )
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-08-05 07:54:12 +02:00
Optionally checks the state of a working copy , if found a file with
unknown state , it requests an user input :
2009-08-03 15:03:24 +02:00
* skip - don ' t change anything, just move to another file
* remove - remove a file from dir
* edit file list - edit filelist using EDITOR
* commit - don ' t check anything and commit package
* abort - abort commit - this is default value
2009-08-05 07:54:12 +02:00
This can be supressed by check_filelist config item , or - f / - - force
command line option .
2009-08-03 15:03:24 +02:00
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 )
2009-08-19 13:28:10 +02:00
if not msg :
msg = edit_message ( )
2008-03-10 19:04:23 +01:00
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
2009-08-04 16:12:45 +02:00
if conf . config [ ' check_filelist ' ] and not opts . force :
2009-08-03 15:03:24 +02:00
check_filelist_before_commit ( pacs )
2009-07-31 13:32:34 +02:00
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 + = [ ' \n Diff 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 ' )
2009-09-03 16:56:48 +02:00
@cmdln.option ( ' -s ' , ' --source-service-files ' , action = ' store_true ' ,
help = ' Use server side generated sources instead of local generation. ' )
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
2009-08-12 01:01:03 +02:00
if ( opts . expand_link and opts . unexpand_link ) \
or ( opts . expand_link and opts . revision ) \
or ( opts . unexpand_link and opts . revision ) :
raise oscerr . WrongOptions ( ' Sorry, the options --expand-link, --unexpand-link and '
' --revision are mutually exclusive. ' )
2009-09-03 16:56:48 +02:00
if opts . source_service_files : service_files = True
else : service_files = False
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 :
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
2009-08-19 15:07:58 +02:00
prj . checkout_missing_pacs ( opts . expand_link )
2008-03-10 19:04:23 +01:00
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
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 )
2009-09-03 16:56:48 +02:00
p . update ( rev , service_files )
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
2009-09-08 10:14:27 +02:00
@cmdln.alias ( ' platforms ' )
def do_repositories ( self , subcmd , opts , * args ) :
""" $ {cmd_name} : Shows available repositories
2009-05-18 16:50:43 +02:00
2007-04-25 01:00:12 +02:00
Examples :
2009-09-08 10:14:27 +02:00
1. osc repositories
Shows all available repositories / build targets
2006-04-20 16:26:50 +02:00
2009-09-08 10:14:27 +02:00
2. osc repositories < project >
Shows the configured repositories / 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 ]
2009-09-08 10:14:27 +02:00
print ' \n ' . join ( get_repositories_of_project ( conf . config [ ' apiurl ' ] , project ) )
2007-04-25 01:00:12 +02:00
else :
2009-09-08 10:14:27 +02:00
print ' \n ' . join ( get_repositories ( 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 )
2009-08-20 21:28:05 +02:00
@cmdln.option ( ' -l ' , ' --last-build ' , action = ' store_true ' ,
help = ' show last build results (succeeded/failed/unknown) ' )
@cmdln.option ( ' -r ' , ' --repo ' , action = ' append ' , default = [ ] ,
help = ' Show results only for specified repo(s) ' )
@cmdln.option ( ' -a ' , ' --arch ' , action = ' append ' , default = [ ] ,
help = ' Show results only for specified architecture(s) ' )
@cmdln.option ( ' ' , ' --xml ' , action = ' store_true ' ,
help = ' generate output in XML (former results_meta) ' )
2009-05-25 13:33:04 +02:00
def do_rresults ( self , subcmd , opts , * args ) :
2009-08-20 21:28:05 +02:00
print " Command rresults is obsolete. Running ' osc results ' instead "
self . do_results ( ' results ' , opts , * args )
2009-05-25 13:33:04 +02:00
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
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-08-20 21:28:05 +02:00
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 ' )
2009-09-08 10:14:27 +02:00
def do_buildlog ( self , subcmd , opts , repository , 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
2009-09-08 10:14:27 +02:00
The arguments REPOSITORY and ARCH are the first two columns in the ' osc
2007-04-25 01:00:12 +02:00
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 )
2009-09-08 10:14:27 +02:00
print_buildlog ( apiurl , project , package , repository , 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 :
2009-09-08 10:14:27 +02:00
osc remotebuildlog project package repository arch
2008-01-03 23:10:16 +01:00
or
2009-09-08 10:14:27 +02:00
osc remotebuildlog project / package / repository / arch
2008-01-03 23:10:16 +01:00
$ { 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-09-08 10:14:27 +02:00
The arguments REPOSITORY 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 :
2009-09-08 10:14:27 +02:00
osc buildinfo REPOSITORY ARCH [ BUILD_DESCR ]
2007-04-25 01:00:12 +02:00
$ { 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
2009-09-08 10:14:27 +02:00
repository = args [ 0 ]
2007-04-25 01:00:12 +02:00
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 ,
2009-09-08 10:14:27 +02:00
project , package , repository , arch ,
2009-05-18 16:50:43 +02:00
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
2009-09-08 10:14:27 +02:00
def do_buildconfig ( self , subcmd , opts , repository , arch ) :
2007-04-25 01:00:12 +02:00
""" $ {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-09-08 10:14:27 +02:00
The arguments REPOSITORY 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
2009-09-08 10:14:27 +02:00
print ' ' . join ( get_buildconfig ( apiurl , project , package , repository , 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 :
2009-09-08 10:14:27 +02:00
for repository in get_repos_of_project ( store_read_apiurl ( arg ) , store_read_project ( arg ) ) :
print repository
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 ' )
2009-08-18 23:28:33 +02:00
@cmdln.option ( ' --rsync-src ' , metavar = ' RSYNCSRCPATH ' , dest = ' rsyncsrc ' ,
help = ' Copy folder to buildroot after installing all RPMs. Use together with --rsync-dest. This is the path on the HOST filesystem e.g. /tmp/linux-kernel-tree. It defines RSYNCDONE 1 . ' )
@cmdln.option ( ' --rsync-dest ' , metavar = ' RSYNCDESTPATH ' , dest = ' rsyncdest ' ,
help = ' Copy folder to buildroot after installing all RPMs. Use together with --rsync-src. This is the path on the TARGET filesystem e.g. /usr/src/packages/BUILD/linux-2.6 . ' )
@cmdln.option ( ' --overlay ' , metavar = ' OVERLAY ' ,
help = ' Copy overlay filesystem to buildroot after installing all RPMs . ' )
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-09-08 10:14:27 +02:00
The arguments REPOSITORY 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 :
2009-09-08 10:14:27 +02:00
osc build [ OPTS ] REPOSITORY ARCH BUILD_DESCR
osc build [ OPTS ] REPOSITORY ( ARCH = hostarch , BUILD_DESCR is detected automatically )
osc build [ OPTS ] ARCH ( REPOSITORY = build_repository ( config option ) , BUILD_DESCR is detected automatically )
osc build [ OPTS ] BUILD_DESCR ( REPOSITORY = build_repository ( config option ) , ARCH = hostarch )
osc build [ OPTS ] ( REPOSITORY = build_repository ( 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
2009-09-08 10:14:27 +02:00
arg_arch = arg_repository = arg_descr = None
2008-07-30 18:45:00 +02:00
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
2009-09-08 10:14:27 +02:00
elif not arg_repository :
arg_repository = arg
2008-07-30 18:45:00 +02:00
else :
raise oscerr . WrongArgs ( ' unexpected argument: \' %s \' ' % arg )
else :
2009-09-08 10:14:27 +02:00
arg_repository , arg_arch , arg_descr = args
2008-07-30 18:45:00 +02:00
arg_arch = arg_arch or osc . build . hostarch
2009-06-23 12:06:31 +02:00
2009-09-08 10:14:27 +02:00
repositories = get_repositories_of_project ( \
2009-06-11 13:32:58 +02:00
store_read_apiurl ( ' . ' ) , \
opts . alternative_project or store_read_project ( ' . ' ) )
2009-09-08 10:14:27 +02:00
if not arg_repository :
2009-06-11 13:32:58 +02:00
2009-09-08 10:14:27 +02:00
if len ( repositories ) == 0 :
arg_repository = conf . config [ ' build_repository ' ]
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
2009-09-08 10:14:27 +02:00
for repository in ( conf . config [ ' build_repository ' ] , ' standard ' , ' openSUSE_Factory ' ) :
if repository in repositories :
arg_repository = repository
2009-06-11 13:38:06 +02:00
break
2009-09-08 10:14:27 +02:00
arg_repository = arg_repository or repositories [ len ( repositories ) - 1 ]
2009-06-11 13:32:58 +02:00
2009-09-08 10:14:27 +02:00
if not arg_repository in repositories :
raise oscerr . WrongArgs ( ' %s is not a valid repository, use one of: %s ' % ( arg_repository , " , " . join ( repositories ) ) )
2009-06-11 13:32:58 +02:00
2009-09-03 16:56:48 +02:00
# check for source services
if os . listdir ( ' . ' ) . count ( " _service " ) :
p = Package ( ' . ' )
p . run_source_services ( )
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
2009-09-08 10:14:27 +02:00
args = ( arg_repository , 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
2009-09-08 10:14:27 +02:00
print ' Building %s for %s / %s ' % ( arg_descr , arg_repository , 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 ' )
2009-09-08 10:14:27 +02:00
def do_buildhistory ( self , subcmd , opts , * args ) :
2007-04-25 01:00:12 +02:00
""" $ {cmd_name} : Shows the build history of a package
2006-05-19 22:13:29 +02:00
2009-09-08 10:14:27 +02:00
The arguments REPOSITORY and ARCH can be taken from the first two columns
2007-04-25 01:00:12 +02:00
of the ' osc repos ' output .
2009-09-08 10:14:27 +02:00
usage :
osc buildhist REPOSITORY ARCHITECTURE
osc buildhist PROJECT PACKAGE REPOSITORY ARCHITECTURE
2007-04-25 01:00:12 +02:00
$ { cmd_option_list }
"""
2006-05-23 15:48:58 +02:00
2009-09-08 10:14:27 +02:00
if len ( args ) == 4 :
apiurl = conf . config [ ' apiurl ' ]
project = args [ 0 ]
package = args [ 1 ]
repository = args [ 2 ]
arch = args [ 3 ]
elif len ( args ) == 2 :
wd = os . curdir
package = store_read_package ( wd )
project = store_read_project ( wd )
repository = args [ 0 ]
arch = args [ 1 ]
apiurl = store_read_apiurl ( wd )
else :
raise oscerr . WrongArgs ( ' Wrong number of arguments ' )
2006-09-29 12:37:53 +02:00
2009-05-13 11:04:27 +02:00
format = ' text '
if opts . csv :
format = ' csv '
2009-09-08 10:14:27 +02:00
print ' \n ' . join ( get_buildhistory ( apiurl , project , package , repository , 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 ' )
2009-09-08 10:14:27 +02:00
def do_jobhistory ( self , subcmd , opts , repository , arch ) :
2009-02-20 12:04:45 +01:00
""" $ {cmd_name} : Shows the job history of a project
2009-09-08 10:14:27 +02:00
The arguments REPOSITORY 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 '
2009-09-08 10:14:27 +02:00
print_jobhistory ( apiurl , project , package , repository , 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-09-08 10:14:27 +02:00
The arguments REPOSITORY and ARCH can be taken from the first two columns
2009-06-23 12:06:31 +02:00
of the ' osc repos ' output .
2006-06-08 12:30:29 +02:00
2009-05-18 16:50:43 +02:00
usage :
2009-09-08 10:14:27 +02:00
osc rebuild PROJECT [ PACKAGE [ REPOSITORY [ 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 )
2009-08-21 03:26:37 +02:00
@cmdln.option ( ' -U ' , ' --user ' , metavar = ' USER ' ,
help = ' search not for yourself, but for the specified USER ' )
@cmdln.option ( ' -a ' , ' --all ' , action = ' store_true ' ,
help = ' all involvements. No effect for requests. Default: bugowner ' )
def do_my ( self , subcmd , opts , * args ) :
""" $ {cmd_name} : Show your projects, packages, or requests.
usage :
osc my pkg osc my [ - a ] [ - U USER ] packages
osc my prj osc my . . . projects
2009-09-03 13:25:12 +02:00
osc my rq osc my . . . requests
2009-08-21 03:26:37 +02:00
$ { cmd_option_list }
2009-09-03 20:08:43 +02:00
' osc my ' implements memonic shorthands for
specific ' osc search ' and ' osc req list ' commands .
See there for additional help .
"""
2009-08-21 03:26:37 +02:00
if not args :
raise oscerr . WrongArgs ( ' Please specify one of projects/packages/requests ' )
2009-09-03 20:08:43 +02:00
if args [ 0 ] in ( ' requests ' , ' request ' , ' req ' , ' rq ' ) :
opts . state = ' all '
opts . type = ' '
opts . days = conf . config [ ' request_list_days ' ]
opts . mine = False
args = [ ' list ' ]
if not opts . user : opts . mine = True
return self . do_request ( ' request ' , opts , * args )
2009-08-21 03:26:37 +02:00
2009-09-03 20:08:43 +02:00
if args [ 0 ] in ( ' packages ' , ' package ' , ' pack ' , ' pkgs ' , ' pkg ' , ' projects ' , ' project ' , ' projs ' , ' proj ' , ' prj ' ) :
opts . title = opts . description = opts . project = opts . package = False
opts . involved = opts . mine = opts . bugowner = opts . maintainer = False
opts . verbose = opts . repos_baseurl = opts . csv = False
if args [ 0 ] in ( ' packages ' , ' package ' , ' pack ' , ' pkgs ' , ' pkg ' ) : opts . package = True
else : opts . project = True
args = [ ]
if opts . user : args = [ opts . user ]
if opts . all : opts . involved = True
else : opts . bugowner = True
return self . do_search ( ' se ' , opts , * args )
2009-08-21 03:26:37 +02:00
2009-09-03 20:08:43 +02:00
raise oscerr . WrongArgs ( ' Unknown arg " %s " : Please specify one of projects/packages/requests ' % args [ 0 ] )
2009-08-21 03:26:37 +02:00
2008-09-30 16:54:08 +02:00
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-08-21 03:26:37 +02:00
help = ' show projects/packages where given person (or myself) is involved as bugowner or maintainer ' )
@cmdln.option ( ' -b ' , ' --bugowner ' , action = ' store_true ' ,
help = ' as -i, but only bugowner ' )
@cmdln.option ( ' -m ' , ' --maintainer ' , action = ' store_true ' ,
help = ' as -i, but only maintainer ' )
@cmdln.option ( ' -M ' , ' --mine ' , action = ' store_true ' ,
help = ' shorthand for --bugowner --package ' )
2009-05-15 10:33:25 +02:00
@cmdln.option ( ' --csv ' , action = ' store_true ' ,
help = ' generate output in CSV (separated by |) ' )
2009-08-21 03:26:37 +02:00
@cmdln.alias ( ' se ' )
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>
2009-09-03 20:08:43 +02:00
osc se . . .
2007-07-15 15:49:13 +02:00
$ { cmd_option_list }
2009-08-20 21:28:05 +02:00
2009-08-21 03:26:37 +02:00
' osc se ' is a shorthand for ' osc search -e '
2009-08-20 21:28:05 +02:00
osc search does not find binary rpm names . Use
http : / / software . opensuse . org / search ? q = binaryname
2007-07-15 15:49:13 +02:00
"""
2009-09-03 20:08:43 +02:00
if subcmd == ' se ' :
2009-08-21 03:26:37 +02:00
opts . exact = True
2009-09-03 20:08:43 +02:00
if opts . mine :
opts . bugowner = True
opts . package = True
for_user = False
2009-08-21 03:26:37 +02:00
if opts . involved or opts . bugowner or opts . maintainer :
2009-09-03 20:08:43 +02:00
for_user = True
2007-07-15 15:49:13 +02:00
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. ' )
2009-08-21 03:26:37 +02:00
elif len ( args ) < 1 and not for_user :
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 ]
2009-08-21 03:26:37 +02:00
if ( opts . title or opts . description ) and for_user :
2008-06-24 17:07:44 +02:00
raise oscerr . WrongArgs ( ' Sorry, the options \' --title \' and/or \' --description \' ' \
2009-08-21 03:26:37 +02:00
' are mutually exclusive with \' -i \' / \' -b \' / \' -m \' / \' -M \' ' )
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 ' )
2009-08-21 03:26:37 +02:00
2009-09-03 20:08:43 +02:00
role_filter = None
2009-08-21 03:26:37 +02:00
if for_user :
2008-06-24 17:07:44 +02:00
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
2009-09-03 20:08:43 +02:00
if opts . bugowner and not opts . maintainer :
role_filter = search_term + ' :bugowner '
if not opts . bugowner and opts . maintainer :
role_filter = search_term + ' :maintainer '
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-08-21 03:26:37 +02:00
result = search ( conf . config [ ' apiurl ' ] , set ( search_list ) , kind , search_term , opts . verbose , opts . exact , opts . repos_baseurl , role_filter )
2009-06-09 19:04:31 +02:00
2009-06-09 19:07:02 +02:00
if not result :
2009-08-21 03:26:37 +02:00
print ' No matches found for \' %s \' in %s s ' % ( role_filter or search_term , kind )
2009-06-09 19:07:02 +02:00
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
2009-08-21 03:26:37 +02:00
print ' matches for \' %s \' in %s s: \n ' % ( role_filter or search_term , kind )
2009-06-09 19:07:02 +02:00
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: ' , ' %d escription ' , ' 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
2009-08-26 16:22:54 +02:00
url = conf . config [ ' apiurl ' ]
2007-07-25 12:56:04 +02:00
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-08-26 16:22:54 +02:00
if not opts . role :
roles = [ ' bugowner ' , ' maintainer ' ]
else :
roles = [ opts . role ]
2009-06-18 18:20:49 +02:00
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-08-26 16:22:54 +02:00
for role in roles :
addPerson ( conf . config [ ' apiurl ' ] , prj , pac , opts . add , role )
2007-09-12 20:01:13 +02:00
elif opts . delete :
2009-08-26 16:22:54 +02:00
for role in roles :
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 ' )
2009-08-20 21:28:05 +02:00
@cmdln.option ( ' -e ' , ' --expand ' , action = ' store_true ' ,
help = ' expand linked package ' )
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
2009-09-03 19:28:27 +02:00
osc cat http : / / api . opensuse . org / build / . . . / _log
osc cat http : / / api . opensuse . org / source / . . / _link
2007-11-02 19:18:30 +01:00
$ { cmd_usage }
$ { cmd_option_list }
"""
2009-09-03 19:28:27 +02:00
if len ( args ) == 1 and ( args [ 0 ] . startswith ( ' http:// ' ) or
args [ 0 ] . startswith ( ' https:// ' ) ) :
opts . method = ' GET '
opts . headers = None
opts . data = None
opts . file = None
return self . do_api ( ' list ' , opts , * args )
2007-11-02 19:18:30 +01:00
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-08-20 21:28:05 +02:00
query = { }
2009-04-09 17:52:59 +02:00
if opts . revision :
2009-08-20 21:28:05 +02:00
query [ ' rev ' ] = opts . revision
if opts . expand :
query [ ' rev ' ] = show_upstream_srcmd5 ( conf . config [ ' apiurl ' ] , args [ 0 ] , args [ 1 ] , expand = True , revision = opts . revision )
2009-04-09 17:52:59 +02:00
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
2009-08-20 21:28:05 +02:00
the merge , use ' osc resolved ... ' and ' osc ci ' to re - create a
working source link .
2009-04-23 10:58:21 +02:00
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
2009-08-20 21:28:05 +02:00
print ' fix the conflicts (files marked with \' C \' above), '
print ' run \' osc resolved ... \' , 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