cedar-backup-svn Mailing List for Cedar Backup (Page 9)
Brought to you by:
pronovic
You can subscribe to this list here.
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(5) |
Dec
(50) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
|
Feb
(5) |
Mar
(55) |
Apr
(13) |
May
(6) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(5) |
Nov
(3) |
Dec
(3) |
| 2009 |
Jan
|
Feb
|
Mar
(11) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(7) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2010 |
Jan
(14) |
Feb
(2) |
Mar
|
Apr
|
May
(7) |
Jun
(8) |
Jul
(30) |
Aug
|
Sep
|
Oct
(4) |
Nov
|
Dec
|
| 2011 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(9) |
Nov
|
Dec
|
| 2013 |
Jan
|
Feb
|
Mar
(3) |
Apr
(10) |
May
(6) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(48) |
Nov
(1) |
Dec
|
| 2015 |
Jan
(5) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <pro...@us...> - 2008-03-21 03:01:51
|
Revision: 902
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=902&view=rev
Author: pronovic
Date: 2008-03-20 20:01:48 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
More tweaks
Modified Paths:
--------------
web/trunk/cedar-backup/source/index.gtml
Modified: web/trunk/cedar-backup/source/index.gtml
===================================================================
--- web/trunk/cedar-backup/source/index.gtml 2008-03-21 02:54:19 UTC (rev 901)
+++ web/trunk/cedar-backup/source/index.gtml 2008-03-21 03:01:48 UTC (rev 902)
@@ -143,15 +143,16 @@
</p>
<a name="contributing"></a>
-<h2>Contributing Changes</h2>
+<h2>Contributing Improvements</h2>
<p>
-Users are welcome to contribute changes to Cedar Backup. In the past, users
-have helped out by reporting unit test failures, making suggestions, requesting
-enhancements, updating documentation, submitting patches, and testing beta
-releases and bug fixes. As a result, Cedar Backup has evolved into a much more
-flexible platform than it would otherwise have been. If you are interested in
-contributing, drop an email off to the Cedar Solutions
+Users are welcome to contribute improvements to Cedar Backup. In the past,
+users have helped out by reporting unit test failures, making suggestions,
+requesting enhancements, updating documentation, submitting patches, and
+beta-testing entire releases or individual bug fixes. As a result, Cedar
+Backup has evolved into a much more flexible platform than it would otherwise
+have been. If you are interested in contributing, drop an email off to the
+Cedar Solutions
<a href="mailto:<<SUPPORT_EMAIL>>">support email address</a>
or to <a href="mailto:<<CONTACT_EMAIL>>">Ken</a> directly.
</p>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-21 02:54:26
|
Revision: 901
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=901&view=rev
Author: pronovic
Date: 2008-03-20 19:54:19 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Update manual copyright
Modified Paths:
--------------
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/manual/src/book.xml
cedar-backup2/trunk/manual/src/copyright.xml
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-21 02:41:10 UTC (rev 900)
+++ cedar-backup2/trunk/Changelog 2008-03-21 02:54:19 UTC (rev 901)
@@ -1,6 +1,6 @@
Version 2.17.1 unreleased
- * Tweak copyright to fix typos.
+ * Tweak various pieces of copyright information.
Version 2.17.0 20 Mar 2008
Modified: cedar-backup2/trunk/manual/src/book.xml
===================================================================
--- cedar-backup2/trunk/manual/src/book.xml 2008-03-21 02:41:10 UTC (rev 900)
+++ cedar-backup2/trunk/manual/src/book.xml 2008-03-21 02:54:19 UTC (rev 901)
@@ -8,7 +8,7 @@
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
-# Copyright (c) 2005-2006 Kenneth J. Pronovici.
+# Copyright (c) 2005-2008 Kenneth J. Pronovici.
# All rights reserved.
#
# This work is free; you can redistribute it and/or modify it
@@ -69,7 +69,7 @@
</editor>
<copyright>
- <year>2005-2007</year>
+ <year>2005-2008</year>
<holder>Kenneth J. Pronovici</holder>
</copyright>
Modified: cedar-backup2/trunk/manual/src/copyright.xml
===================================================================
--- cedar-backup2/trunk/manual/src/copyright.xml 2008-03-21 02:41:10 UTC (rev 900)
+++ cedar-backup2/trunk/manual/src/copyright.xml 2008-03-21 02:54:19 UTC (rev 901)
@@ -7,7 +7,7 @@
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
-# Copyright (c) 2005-2006 Kenneth J. Pronovici.
+# Copyright (c) 2005-2008 Kenneth J. Pronovici.
# All rights reserved.
#
# This work is free; you can redistribute it and/or modify it
@@ -40,7 +40,7 @@
<programlisting>
-Copyright (c) 2005-2006
+Copyright (c) 2005-2008
Kenneth J. Pronovici
This work is free; you can redistribute it and/or modify it under
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-21 02:41:15
|
Revision: 900
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=900&view=rev
Author: pronovic
Date: 2008-03-20 19:41:10 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Minor tweaks
Modified Paths:
--------------
web/trunk/cedar-backup/source/index.gtml
Modified: web/trunk/cedar-backup/source/index.gtml
===================================================================
--- web/trunk/cedar-backup/source/index.gtml 2008-03-20 21:30:07 UTC (rev 899)
+++ web/trunk/cedar-backup/source/index.gtml 2008-03-21 02:41:10 UTC (rev 900)
@@ -42,10 +42,10 @@
be a good fit for people who need to back up a limited amount of important data
to CD or DVD on a regular basis. Cedar Backup isn't for you if you want to back
up your MP3 collection every night, or if you want to back up a few hundred
-machines. However, if you administer a small set machines and you want to run
-daily incremental backups for things like system configuration, current email,
-small web sites, a CVS or Subversion repository, or a small MySQL database,
-then Cedar Backup is probably worth your time.
+machines. However, if you administer a small set of machines and you want to
+run daily incremental backups for things like system configuration, current
+email, small web sites, a CVS or Subversion repository, or a small MySQL
+database, then Cedar Backup is probably worth your time.
</p>
<p>
@@ -114,12 +114,13 @@
</p>
<p>
-Any recent Debian-based distribution (such as Ubuntu) includes official Cedar
-Backup packages, called <tt>cedar-backup2</tt> and <tt>cedar-backup2-doc</tt>.
+Any recent Debian-based distribution (either Debian itself or
+a derivative such as Ubuntu) includes official Cedar Backup packages,
+called <tt>cedar-backup2</tt> and <tt>cedar-backup2-doc</tt>.
</p>
<p>
-Debian who want to always run the latest release of Cedar Backup, rather than
+Debian users who want to always run the latest release of Cedar Backup, rather than
the version included with their distribution, can use the Cedar Solutions APT
source. See the Cedar Solutions <a href="<<CEDAR_DEBIAN_URL>>">Debian page</a>
for more information.
@@ -136,21 +137,22 @@
</p>
<p>
-If you think you have found a bug or you would like to request an
-enhancement, file a ticket with SourceForge <a href="<<SF_BTS_URL>>">tracker</a>
-or submit a patch.
+If you think you have found a bug or you would like to request an enhancement,
+file a ticket with SourceForge <a href="<<SF_BTS_URL>>">tracker</a> or submit a
+patch, or email <a href="mailto:<<CONTACT_EMAIL>>">Ken</a> directly.
</p>
<a name="contributing"></a>
-<h2>Contributing</h2>
+<h2>Contributing Changes</h2>
<p>
-Users are welcome to contribute to Cedar Backup. In the past, users have
-helped out by making suggestions, requesting enhancements, updating
-documentation, submitting patches, and testing beta releases. As a result,
-Cedar Backup has evolved into a much more flexible platform than it would
-otherwise have been. If you are interested in contributing, drop an email off
-to the Cedar Solutions <a href="mailto:<<SUPPORT_EMAIL>>">support email address</a>
+Users are welcome to contribute changes to Cedar Backup. In the past, users
+have helped out by reporting unit test failures, making suggestions, requesting
+enhancements, updating documentation, submitting patches, and testing beta
+releases and bug fixes. As a result, Cedar Backup has evolved into a much more
+flexible platform than it would otherwise have been. If you are interested in
+contributing, drop an email off to the Cedar Solutions
+<a href="mailto:<<SUPPORT_EMAIL>>">support email address</a>
or to <a href="mailto:<<CONTACT_EMAIL>>">Ken</a> directly.
</p>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 21:30:19
|
Revision: 899
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=899&view=rev
Author: pronovic
Date: 2008-03-20 14:30:07 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Clean up a few Changelog entries
Modified Paths:
--------------
cedar-backup2/trunk/Changelog
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-20 21:16:42 UTC (rev 898)
+++ cedar-backup2/trunk/Changelog 2008-03-20 21:30:07 UTC (rev 899)
@@ -15,7 +15,7 @@
- Change calculateFileAge() to use floats throughout, which is safer
- Change removeYoungFiles() to explicitly check on whole days
- Put a 1-second fudge factor into unit tests when setting file ages
- * Fix some unit test failures discovered on Windows 2000.
+ * Fix some unit test failures discovered on Windows XP.
- Fix utiltests.TestFunctions.testNullDevice_001()
- Fix filesystemtests.TestBackupFileList.testGenerateFitted_004()
- Fix typo in filesystemtests.TestFilesystemList.testRemoveLinks_002()
@@ -24,16 +24,16 @@
* Make name attribute optional in RemotePeer constructor.
* Add support for collecting soft links (closes: #1854631).
- - Add linkDepth parameter to FilesystemList.addDirContents()
- - Add CollectDir.linkDepth attribute
- - Modify collect action to obey CollectDir.linkDepth
- - Update user manual to discuss new attribute
- - Document "link farm" option for collect configuration
+ - Add linkDepth parameter to FilesystemList.addDirContents()
+ - Add CollectDir.linkDepth attribute
+ - Modify collect action to obey CollectDir.linkDepth
+ - Update user manual to discuss new attribute
+ - Document "link farm" option for collect configuration
* Implement a capacity-checking extension (closes: #1915496).
- - Add new extension in CedarBackup2/extend/capacity.py
- - Refactor ByteQuantity out of split.py and into config.py
- - Add total capacity and utilization to MediaCapacity classes
- - Update user manual to discuss new extension
+ - Add new extension in CedarBackup2/extend/capacity.py
+ - Refactor ByteQuantity out of split.py and into config.py
+ - Add total capacity and utilization to MediaCapacity classes
+ - Update user manual to discuss new extension
Version 2.15.3 16 Mar 2008
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 21:16:57
|
Revision: 898
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=898&view=rev
Author: pronovic
Date: 2008-03-20 14:16:42 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Tweak copyright statement
Modified Paths:
--------------
cedar-backup2/trunk/CREDITS
cedar-backup2/trunk/Changelog
Modified: cedar-backup2/trunk/CREDITS
===================================================================
--- cedar-backup2/trunk/CREDITS 2008-03-20 20:32:07 UTC (rev 897)
+++ cedar-backup2/trunk/CREDITS 2008-03-20 21:16:42 UTC (rev 898)
@@ -22,7 +22,7 @@
Pronovici. Some portions have been based on other pieces of open-source
software, as indicated in the source code itself.
-Unless otherwise indicated, all Cedar Backup source code is copyright
+Unless otherwise indicated, all Cedar Backup source code is Copyright
(c) 2004-2008 Kenneth J. Pronovici and is released under the GNU General
Public License. The contents of the GNU General Public License can be
found in the LICENSE file, or can be downloaded from http://www.gnu.org/.
@@ -40,7 +40,7 @@
Source code annotated as "(c) 2001, 2002 Python Software Foundation" was
originally taken from or derived from code within the Python 2.3 codebase.
-This code was released under the Python 2.3 license, which an MIT-style
+This code was released under the Python 2.3 license, which is an MIT-style
academic license. Items under this license include the util.Pipe
implementation based on popen2.Popen4.
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-20 20:32:07 UTC (rev 897)
+++ cedar-backup2/trunk/Changelog 2008-03-20 21:16:42 UTC (rev 898)
@@ -1,3 +1,7 @@
+Version 2.17.1 unreleased
+
+ * Tweak copyright to fix typos.
+
Version 2.17.0 20 Mar 2008
* Change suggested execution index for Capacity extension in manual.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 20:32:14
|
Revision: 897
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=897&view=rev
Author: pronovic
Date: 2008-03-20 13:32:07 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Tagging the 2.17.0 release of Cedar Backup.
Added Paths:
-----------
cedar-backup2/tags/CEDAR_BACKUP2_V2.17.0/
Copied: cedar-backup2/tags/CEDAR_BACKUP2_V2.17.0 (from rev 896, cedar-backup2/trunk)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 20:31:52
|
Revision: 896
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=896&view=rev
Author: pronovic
Date: 2008-03-20 13:31:49 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Release 2.17.0
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/release.py
cedar-backup2/trunk/Changelog
Modified: cedar-backup2/trunk/CedarBackup2/release.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/release.py 2008-03-20 20:25:20 UTC (rev 895)
+++ cedar-backup2/trunk/CedarBackup2/release.py 2008-03-20 20:31:49 UTC (rev 896)
@@ -34,7 +34,7 @@
AUTHOR = "Kenneth J. Pronovici"
EMAIL = "pro...@ie..."
COPYRIGHT = "2004-2008"
-VERSION = "2.16.1pre1"
-DATE = "19 Mar 2008"
+VERSION = "2.17.0"
+DATE = "20 Mar 2008"
URL = "http://cedar-solutions.com/software/cedar-backup"
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-20 20:25:20 UTC (rev 895)
+++ cedar-backup2/trunk/Changelog 2008-03-20 20:31:49 UTC (rev 896)
@@ -1,10 +1,11 @@
-Version 2.16.1 unreleased
+Version 2.17.0 20 Mar 2008
* Change suggested execution index for Capacity extension in manual.
* Provide support for application-wide diagnostic reporting.
- Add util.Diagnostics class to encapsulate information
- Log diagnostics when Cedar Backup first starts
- Print diagnostics when running unit tests
+ - Add a new --diagnostics command-line option
* Clean up filesystem code that deals with file age, and improve unit tests.
- Some platforms apparently cannot set file ages precisely
- Change calculateFileAge() to use floats throughout, which is safer
@@ -17,7 +18,7 @@
Version 2.16.0 18 Mar 2008
- * Make name attribute optional in RemotPeer constructor.
+ * Make name attribute optional in RemotePeer constructor.
* Add support for collecting soft links (closes: #1854631).
- Add linkDepth parameter to FilesystemList.addDirContents()
- Add CollectDir.linkDepth attribute
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 20:25:34
|
Revision: 895
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=895&view=rev
Author: pronovic
Date: 2008-03-20 13:25:20 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Make Diagnostics class a little more tolerant of errors
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/util.py
Modified: cedar-backup2/trunk/CedarBackup2/util.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 20:08:05 UTC (rev 894)
+++ cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 20:25:20 UTC (rev 895)
@@ -84,8 +84,6 @@
import time
import logging
import string
-import locale
-import datetime
from CedarBackup2.release import VERSION, DATE
@@ -979,7 +977,7 @@
def getValues(self):
"""
- Get a values map for each diagnostic.
+ Get a map containing all of the diagnostic values.
@return: Map from diagnostic name to diagnostic value.
"""
values = {}
@@ -1004,7 +1002,7 @@
def logDiagnostics(self, method, prefix=""):
"""
- Pretty-print diagnostic information to the logger.
+ Pretty-print diagnostic information using a logger method.
@param method: Logger method to use for logging (i.e. logger.info)
@param prefix: Prefix string (if any) to place onto printed lines
"""
@@ -1079,20 +1077,28 @@
release = uname[2] # i.e. 2.16.18-2
machine = uname[4] # i.e. i686
return "%s (%s %s %s)" % (sys.platform, sysname, release, machine)
- except AttributeError:
+ except:
return sys.platform
def _getLocale(self):
"""
Property target to get the default locale that is in effect.
"""
- return locale.getdefaultlocale()[0]
+ try:
+ import locale
+ return locale.getdefaultlocale()[0]
+ except:
+ return "(unknown)"
def _getTimestamp(self):
"""
Property target to get a current date/time stamp.
"""
- return datetime.datetime.utcnow().ctime() + " UTC"
+ try:
+ import datetime
+ return datetime.datetime.utcnow().ctime() + " UTC"
+ except:
+ return "(unknown)"
version = property(_getVersion, None, None, "Cedar Backup version.")
interpreter = property(_getInterpreter, None, None, "Python interpreter version.")
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 20:08:11
|
Revision: 894
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=894&view=rev
Author: pronovic
Date: 2008-03-20 13:08:05 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Add --diagnostics command-line option
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/cli.py
cedar-backup2/trunk/doc/cback.1
cedar-backup2/trunk/manual/src/commandline.xml
cedar-backup2/trunk/test/clitests.py
Modified: cedar-backup2/trunk/CedarBackup2/cli.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/cli.py 2008-03-20 19:28:51 UTC (rev 893)
+++ cedar-backup2/trunk/CedarBackup2/cli.py 2008-03-20 20:08:05 UTC (rev 894)
@@ -130,11 +130,11 @@
COMBINE_ACTIONS = [ "collect", "stage", "store", "purge", ]
NONCOMBINE_ACTIONS = [ "rebuild", "validate", "initialize", "all", ]
-SHORT_SWITCHES = "hVbqc:fMNl:o:m:Ods"
+SHORT_SWITCHES = "hVbqc:fMNl:o:m:OdsD"
LONG_SWITCHES = [ 'help', 'version', 'verbose', 'quiet',
'config=', 'full', 'managed', 'managed-only',
'logfile=', 'owner=', 'mode=',
- 'output', 'debug', 'stack', ]
+ 'output', 'debug', 'stack', 'diagnostics', ]
#######################################################################
@@ -208,6 +208,9 @@
if options.version:
_version()
return 0
+ if options.diagnostics:
+ _diagnostics()
+ return 0
try:
logfile = setupLogging(options)
@@ -922,6 +925,7 @@
fd.write(" -O, --output Record some sub-command (i.e. cdrecord) output to the log\n")
fd.write(" -d, --debug Write debugging information to the log (implies --output)\n")
fd.write(" -s, --stack Dump a Python stack trace instead of swallowing exceptions\n") # exactly 80 characters in width!
+ fd.write(" -D, --diagnostics Print runtime diagnostics to the screen and exit\n")
fd.write("\n")
fd.write(" The following actions may be specified:\n")
fd.write("\n")
@@ -969,6 +973,23 @@
##########################
+# _diagnostics() function
+##########################
+
+def _diagnostics(fd=sys.stdout):
+ """
+ Prints runtime diagnostics information.
+ @param fd: File descriptor used to print information.
+ @note: The C{fd} is used rather than C{print} to facilitate unit testing.
+ """
+ fd.write("\n")
+ fd.write("Diagnostics:\n")
+ fd.write("\n")
+ Diagnostics().printDiagnostics(fd=fd, prefix=" ")
+ fd.write("\n")
+
+
+##########################
# setupLogging() function
##########################
@@ -1264,6 +1285,7 @@
self._output = False
self._debug = False
self._stacktrace = False
+ self._diagnostics = False
self._actions = None
self.actions = [] # initialize to an empty list; remainder are OK
if argumentList is not None and argumentString is not None:
@@ -1376,6 +1398,11 @@
return -1
else:
return 1
+ if self._diagnostics != other._diagnostics:
+ if self._diagnostics < other._diagnostics:
+ return -1
+ else:
+ return 1
if self._actions != other._actions:
if self._actions < other._actions:
return -1
@@ -1629,6 +1656,22 @@
"""
return self._stacktrace
+ def _setDiagnostics(self, value):
+ """
+ Property target used to set the diagnostics flag.
+ No validations, but we normalize the value to C{True} or C{False}.
+ """
+ if value:
+ self._diagnostics = True
+ else:
+ self._diagnostics = False
+
+ def _getDiagnostics(self):
+ """
+ Property target used to get the diagnostics flag.
+ """
+ return self._diagnostics
+
def _setActions(self, value):
"""
Property target used to set the actions list.
@@ -1666,6 +1709,7 @@
output = property(_getOutput, _setOutput, None, "Command-line output (C{-O,--output}) flag.")
debug = property(_getDebug, _setDebug, None, "Command-line debug (C{-d,--debug}) flag.")
stacktrace = property(_getStacktrace, _setStacktrace, None, "Command-line stacktrace (C{-s,--stack}) flag.")
+ diagnostics = property(_getDiagnostics, _setDiagnostics, None, "Command-line diagnostics (C{-D,--diagnostics}) flag.")
actions = property(_getActions, _setActions, None, "Command-line actions list.")
@@ -1687,7 +1731,7 @@
@raise ValueError: If one of the validations fails.
"""
- if not self.help and not self.version:
+ if not self.help and not self.version and not self.diagnostics:
if self.actions is None or len(self.actions) == 0:
raise ValueError("At least one action must be specified.")
if self.managed and self.managedOnly:
@@ -1755,6 +1799,8 @@
argumentList.append("--debug")
if self.stacktrace:
argumentList.append("--stack")
+ if self.diagnostics:
+ argumentList.append("--diagnostics")
if self.actions is not None:
for action in self.actions:
argumentList.append(action)
@@ -1818,6 +1864,8 @@
argumentString += "--debug "
if self.stacktrace:
argumentString += "--stack "
+ if self.diagnostics:
+ argumentString += "--diagnostics "
if self.actions is not None:
for action in self.actions:
argumentString += "\"%s\" " % action
@@ -1884,6 +1932,8 @@
self.debug = True
if switches.has_key("-s") or switches.has_key("--stack"):
self.stacktrace = True
+ if switches.has_key("-D") or switches.has_key("--diagnostics"):
+ self.diagnostics = True
#########################################################################
Modified: cedar-backup2/trunk/doc/cback.1
===================================================================
--- cedar-backup2/trunk/doc/cback.1 2008-03-20 19:28:51 UTC (rev 893)
+++ cedar-backup2/trunk/doc/cback.1 2008-03-20 20:08:05 UTC (rev 894)
@@ -15,7 +15,7 @@
.\" #
.\" # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
.\"
-.TH cback "1" "December 2007" "Cedar Backup" "Kenneth J. Pronovici"
+.TH cback "1" "March 2008" "Cedar Backup" "Kenneth J. Pronovici"
.SH NAME
cback \- Local and remote backups to CD-R/CD-RW media
.SH SYNOPSIS
@@ -124,6 +124,10 @@
than just progating last message it received back up to the user interface.
Under some circumstances, this is useful information to include along with a
bug report.
+.TP
+\fB\-s\fR, \fB\-\-diagnostics\fR
+Display runtime diagnostic information and then exit. This diagnostic
+information is often useful when filing a bug report.
.SH ACTIONS
.TP
\fBall\fR
@@ -215,16 +219,16 @@
.PP
There probably are bugs in this code. However, it is in active use for my own
backups, and I fix problems as I notice them. If you find a bug, please report
-it. If possible, give me all of the error messages that the script printed
-into its log, and also any stack-traces (exceptions) that Python printed. It
-would be even better if you could tell me how to reproduce the problem (i.e. by
-sending me your configuration file).
+it. If possible, give me the output from --diagnostics, all of the error
+messages that the script printed into its log, and also any stack-traces
+(exceptions) that Python printed. It would be even better if you could tell me
+how to reproduce the problem (i.e. by sending me your configuration file).
.PP
Report bugs to <su...@ce...>.
.SH AUTHOR
Written by Kenneth J. Pronovici <pro...@ie...>.
.SH COPYRIGHT
-Copyright (c) 2004-2007 Kenneth J. Pronovici.
+Copyright (c) 2004-2008 Kenneth J. Pronovici.
.br
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
Modified: cedar-backup2/trunk/manual/src/commandline.xml
===================================================================
--- cedar-backup2/trunk/manual/src/commandline.xml 2008-03-20 19:28:51 UTC (rev 893)
+++ cedar-backup2/trunk/manual/src/commandline.xml 2008-03-20 20:08:05 UTC (rev 894)
@@ -109,6 +109,7 @@
-O, --output Record some sub-command (i.e. cdrecord) output to the log
-d, --debug Write debugging information to the log (implies --output)
-s, --stack Dump a Python stack trace instead of swallowing exceptions
+ -D, --diagnostics Print runtime diagnostics to the screen and exit
The following actions may be specified:
@@ -314,6 +315,17 @@
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>-D</option>, <option>--diagnostics</option></term>
+ <listitem>
+ <para>
+ Display runtime diagnostic information and then exit.
+ This diagnostic information is often useful when filing a
+ bug report.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect2>
Modified: cedar-backup2/trunk/test/clitests.py
===================================================================
--- cedar-backup2/trunk/test/clitests.py 2008-03-20 19:28:51 UTC (rev 893)
+++ cedar-backup2/trunk/test/clitests.py 2008-03-20 20:08:05 UTC (rev 894)
@@ -84,7 +84,7 @@
from CedarBackup2.config import OptionsConfig, PeersConfig, ExtensionsConfig
from CedarBackup2.config import LocalPeer, RemotePeer
from CedarBackup2.config import ExtendedAction, ActionDependencies, PreActionHook, PostActionHook
-from CedarBackup2.cli import _usage, _version
+from CedarBackup2.cli import _usage, _version, _diagnostics
from CedarBackup2.cli import Options
from CedarBackup2.cli import _ActionSet
from CedarBackup2.action import executeCollect, executeStage, executeStore, executePurge, executeRebuild, executeValidate
@@ -131,7 +131,14 @@
"""
captureOutput(_version)
+ def testSimpleFuncs_003(self):
+ """
+ Test that the _diagnostics() function runs without errors.
+ We don't care what the output is, and we don't check.
+ """
+ captureOutput(_diagnostics)
+
####################
# TestOptions class
####################
@@ -196,6 +203,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_002(self):
@@ -217,6 +225,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_003(self):
@@ -238,6 +247,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_004(self):
@@ -259,6 +269,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_005(self):
@@ -280,6 +291,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_006(self):
@@ -301,6 +313,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_007(self):
@@ -322,6 +335,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_008(self):
@@ -343,6 +357,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_009(self):
@@ -364,6 +379,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_010(self):
@@ -385,6 +401,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_011(self):
@@ -406,6 +423,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_012(self):
@@ -427,6 +445,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_013(self):
@@ -448,6 +467,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_014(self):
@@ -469,6 +489,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_015(self):
@@ -490,6 +511,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_016(self):
@@ -511,6 +533,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_017(self):
@@ -532,6 +555,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_018(self):
@@ -553,6 +577,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_019(self):
@@ -574,6 +599,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_020(self):
@@ -595,6 +621,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_021(self):
@@ -640,6 +667,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_026(self):
@@ -661,6 +689,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_027(self):
@@ -682,6 +711,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_028(self):
@@ -703,6 +733,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_029(self):
@@ -724,7 +755,9 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_030(self):
@@ -746,6 +779,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_031(self):
@@ -767,6 +801,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_032(self):
@@ -788,6 +823,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_033(self):
@@ -833,6 +869,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_038(self):
@@ -854,6 +891,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_039(self):
@@ -875,6 +913,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_040(self):
@@ -896,6 +935,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_041(self):
@@ -965,6 +1005,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_050(self):
@@ -986,6 +1027,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_051(self):
@@ -1007,6 +1049,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_052(self):
@@ -1028,6 +1071,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_053(self):
@@ -1097,6 +1141,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_062(self):
@@ -1118,6 +1163,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_063(self):
@@ -1139,6 +1185,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_064(self):
@@ -1160,6 +1207,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_065(self):
@@ -1181,6 +1229,7 @@
self.failUnlessEqual(True, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_066(self):
@@ -1202,6 +1251,7 @@
self.failUnlessEqual(True, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_067(self):
@@ -1223,6 +1273,7 @@
self.failUnlessEqual(True, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_068(self):
@@ -1244,6 +1295,7 @@
self.failUnlessEqual(True, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_069(self):
@@ -1265,6 +1317,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(True, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_070(self):
@@ -1286,6 +1339,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(True, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_071(self):
@@ -1307,6 +1361,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(True, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_072(self):
@@ -1328,6 +1383,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(True, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_073(self):
@@ -1349,6 +1405,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(True, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_074(self):
@@ -1370,6 +1427,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(True, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_075(self):
@@ -1412,6 +1470,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(True, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_077(self):
@@ -1433,6 +1492,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["all", ], options.actions)
def testConstructor_078(self):
@@ -1454,6 +1514,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["all", ], options.actions)
def testConstructor_079(self):
@@ -1475,6 +1536,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", ], options.actions)
def testConstructor_080(self):
@@ -1496,6 +1558,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", ], options.actions)
def testConstructor_081(self):
@@ -1517,6 +1580,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["stage", ], options.actions)
def testConstructor_082(self):
@@ -1538,6 +1602,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["stage", ], options.actions)
def testConstructor_083(self):
@@ -1559,6 +1624,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["store", ], options.actions)
def testConstructor_084(self):
@@ -1580,6 +1646,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["store", ], options.actions)
def testConstructor_085(self):
@@ -1601,6 +1668,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["purge", ], options.actions)
def testConstructor_086(self):
@@ -1622,6 +1690,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["purge", ], options.actions)
def testConstructor_087(self):
@@ -1643,6 +1712,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["rebuild", ], options.actions)
def testConstructor_088(self):
@@ -1664,6 +1734,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["rebuild", ], options.actions)
def testConstructor_089(self):
@@ -1685,6 +1756,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["validate", ], options.actions)
def testConstructor_090(self):
@@ -1706,6 +1778,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["validate", ], options.actions)
def testConstructor_091(self):
@@ -1727,6 +1800,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "all", ], options.actions)
def testConstructor_092(self):
@@ -1748,6 +1822,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "all", ], options.actions)
def testConstructor_093(self):
@@ -1769,6 +1844,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "rebuild", ], options.actions)
def testConstructor_094(self):
@@ -1790,6 +1866,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "rebuild", ], options.actions)
def testConstructor_095(self):
@@ -1811,6 +1888,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "validate", ], options.actions)
def testConstructor_096(self):
@@ -1832,6 +1910,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "validate", ], options.actions)
def testConstructor_097(self):
@@ -1853,6 +1932,7 @@
self.failUnlessEqual(True, options.output)
self.failUnlessEqual(True, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "stage", ], options.actions)
def testConstructor_098(self):
@@ -1874,6 +1954,7 @@
self.failUnlessEqual(True, options.output)
self.failUnlessEqual(True, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "stage", ], options.actions)
def testConstructor_099(self):
@@ -1907,6 +1988,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_102(self):
@@ -1928,6 +2010,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_103(self):
@@ -1949,6 +2032,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_104(self):
@@ -1970,6 +2054,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_105(self):
@@ -1991,6 +2076,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_106(self):
@@ -2012,6 +2098,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_107(self):
@@ -2033,6 +2120,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_108(self):
@@ -2054,6 +2142,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_109(self):
@@ -2459,6 +2548,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["all", ], options.actions)
def testConstructor_174(self):
@@ -2480,6 +2570,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["all", ], options.actions)
def testConstructor_175(self):
@@ -2501,6 +2592,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", ], options.actions)
def testConstructor_176(self):
@@ -2522,6 +2614,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", ], options.actions)
def testConstructor_177(self):
@@ -2543,6 +2636,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["stage", ], options.actions)
def testConstructor_178(self):
@@ -2564,6 +2658,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["stage", ], options.actions)
def testConstructor_179(self):
@@ -2585,6 +2680,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["store", ], options.actions)
def testConstructor_180(self):
@@ -2606,6 +2702,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["store", ], options.actions)
def testConstructor_181(self):
@@ -2627,6 +2724,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["purge", ], options.actions)
def testConstructor_182(self):
@@ -2646,6 +2744,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["purge", ], options.actions)
def testConstructor_183(self):
@@ -2667,6 +2766,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["rebuild", ], options.actions)
def testConstructor_184(self):
@@ -2688,6 +2788,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["rebuild", ], options.actions)
def testConstructor_185(self):
@@ -2709,6 +2810,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["validate", ], options.actions)
def testConstructor_186(self):
@@ -2730,6 +2832,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["validate", ], options.actions)
def testConstructor_187(self):
@@ -2751,6 +2854,7 @@
self.failUnlessEqual(True, options.output)
self.failUnlessEqual(True, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "stage", ], options.actions)
def testConstructor_188(self):
@@ -2772,6 +2876,7 @@
self.failUnlessEqual(True, options.output)
self.failUnlessEqual(True, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual(["collect", "stage", ], options.actions)
def testConstructor_189(self):
@@ -2793,7 +2898,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
- self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_190(self):
@@ -2815,6 +2920,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_191(self):
@@ -2836,6 +2942,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_192(self):
@@ -2857,6 +2964,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_193(self):
@@ -2878,7 +2986,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
- self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_194(self):
@@ -2900,6 +3008,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_195(self):
@@ -2921,6 +3030,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_196(self):
@@ -2942,6 +3052,7 @@
self.failUnlessEqual(False, options.output)
self.failUnlessEqual(False, options.debug)
self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(False, options.diagnostics)
self.failUnlessEqual([], options.actions)
def testConstructor_197(self):
@@ -2992,7 +3103,183 @@
"""
self.failUnlessRaises(ValueError, Options, argumentString="-N", validate=True)
+ def testConstructor_205(self):
+ """
+ Test constructor with argumentList=["--diagnostics", ], validate=False.
+ """
+ options = Options(argumentList=["--diagnostics", ], validate=False)
+ self.failUnlessEqual(False, options.help)
+ self.failUnlessEqual(False, options.version)
+ self.failUnlessEqual(False, options.verbose)
+ self.failUnlessEqual(False, options.quiet)
+ self.failUnlessEqual(None, options.config)
+ self.failUnlessEqual(False, options.full)
+ self.failUnlessEqual(False, options.managed)
+ self.failUnlessEqual(False, options.managedOnly)
+ self.failUnlessEqual(None, options.logfile)
+ self.failUnlessEqual(None, options.owner)
+ self.failUnlessEqual(None, options.mode)
+ self.failUnlessEqual(False, options.output)
+ self.failUnlessEqual(False, options.debug)
+ self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(True, options.diagnostics)
+ self.failUnlessEqual([], options.actions)
+ def testConstructor_206(self):
+ """
+ Test constructor with argumentString="--diagnostics", validate=False.
+ """
+ options = Options(argumentString="--diagnostics", validate=False)
+ self.failUnlessEqual(False, options.help)
+ self.failUnlessEqual(False, options.version)
+ self.failUnlessEqual(False, options.verbose)
+ self.failUnlessEqual(False, options.quiet)
+ self.failUnlessEqual(None, options.config)
+ self.failUnlessEqual(False, options.full)
+ self.failUnlessEqual(False, options.managed)
+ self.failUnlessEqual(False, options.managedOnly)
+ self.failUnlessEqual(None, options.logfile)
+ self.failUnlessEqual(None, options.owner)
+ self.failUnlessEqual(None, options.mode)
+ self.failUnlessEqual(False, options.output)
+ self.failUnlessEqual(False, options.debug)
+ self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(True, options.diagnostics)
+ self.failUnlessEqual([], options.actions)
+
+ def testConstructor_207(self):
+ """
+ Test constructor with argumentList=["-D", ], validate=False.
+ """
+ options = Options(argumentList=["-D", ], validate=False)
+ self.failUnlessEqual(False, options.help)
+ self.failUnlessEqual(False, options.version)
+ self.failUnlessEqual(False, options.verbose)
+ self.failUnlessEqual(False, options.quiet)
+ self.failUnlessEqual(None, options.config)
+ self.failUnlessEqual(False, options.full)
+ self.failUnlessEqual(False, options.managed)
+ self.failUnlessEqual(False, options.managedOnly)
+ self.failUnlessEqual(None, options.logfile)
+ self.failUnlessEqual(None, options.owner)
+ self.failUnlessEqual(None, options.mode)
+ self.failUnlessEqual(False, options.output)
+ self.failUnlessEqual(False, options.debug)
+ self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(True, options.diagnostics)
+ self.failUnlessEqual([], options.actions)
+
+ def testConstructor_208(self):
+ """
+ Test constructor with argumentString="-D", validate=False.
+ """
+ options = Options(argumentString="-D", validate=False)
+ self.failUnlessEqual(False, options.help)
+ self.failUnlessEqual(False, options.version)
+ self.failUnlessEqual(False, options.verbose)
+ self.failUnlessEqual(False, options.quiet)
+ self.failUnlessEqual(None, options.config)
+ self.failUnlessEqual(False, options.full)
+ self.failUnlessEqual(False, options.managed)
+ self.failUnlessEqual(False, options.managedOnly)
+ self.failUnlessEqual(None, options.logfile)
+ self.failUnlessEqual(None, options.owner)
+ self.failUnlessEqual(None, options.mode)
+ self.failUnlessEqual(False, options.output)
+ self.failUnlessEqual(False, options.debug)
+ self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(True, options.diagnostics)
+ self.failUnlessEqual([], options.actions)
+
+ def testConstructor_209(self):
+ """
+ Test constructor with argumentList=["--diagnostics", ], validate=True.
+ """
+ options = Options(argumentList=["--diagnostics", ], validate=True)
+ self.failUnlessEqual(False, options.help)
+ self.failUnlessEqual(False, options.version)
+ self.failUnlessEqual(False, options.verbose)
+ self.failUnlessEqual(False, options.quiet)
+ self.failUnlessEqual(None, options.config)
+ self.failUnlessEqual(False, options.full)
+ self.failUnlessEqual(False, options.managed)
+ self.failUnlessEqual(False, options.managedOnly)
+ self.failUnlessEqual(None, options.logfile)
+ self.failUnlessEqual(None, options.owner)
+ self.failUnlessEqual(None, options.mode)
+ self.failUnlessEqual(False, options.output)
+ self.failUnlessEqual(False, options.debug)
+ self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(True, options.diagnostics)
+ self.failUnlessEqual([], options.actions)
+
+ def testConstructor_210(self):
+ """
+ Test constructor with argumentString="--diagnostics", validate=True.
+ """
+ options = Options(argumentString="--diagnostics", validate=True)
+ self.failUnlessEqual(False, options.help)
+ self.failUnlessEqual(False, options.version)
+ self.failUnlessEqual(False, options.verbose)
+ self.failUnlessEqual(False, options.quiet)
+ self.failUnlessEqual(None, options.config)
+ self.failUnlessEqual(False, options.full)
+ self.failUnlessEqual(False, options.managed)
+ self.failUnlessEqual(False, options.managedOnly)
+ self.failUnlessEqual(None, options.logfile)
+ self.failUnlessEqual(None, options.owner)
+ self.failUnlessEqual(None, options.mode)
+ self.failUnlessEqual(False, options.output)
+ self.failUnlessEqual(False, options.debug)
+ self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(True, options.diagnostics)
+ self.failUnlessEqual([], options.actions)
+
+ def testConstructor_211(self):
+ """
+ Test constructor with argumentList=["-D", ], validate=True.
+ """
+ options = Options(argumentList=["-D", ], validate=True)
+ self.failUnlessEqual(False, options.help)
+ self.failUnlessEqual(False, options.version)
+ self.failUnlessEqual(False, options.verbose)
+ self.failUnlessEqual(False, options.quiet)
+ self.failUnlessEqual(None, options.config)
+ self.failUnlessEqual(False, options.full)
+ self.failUnlessEqual(False, options.managed)
+ self.failUnlessEqual(False, options.managedOnly)
+ self.failUnlessEqual(None, options.logfile)
+ self.failUnlessEqual(None, options.owner)
+ self.failUnlessEqual(None, options.mode)
+ self.failUnlessEqual(False, options.output)
+ self.failUnlessEqual(False, options.debug)
+ self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(True, options.diagnostics)
+ self.failUnlessEqual([], options.actions)
+
+ def testConstructor_212(self):
+ """
+ Test constructor with argumentString="-D", validate=True.
+ """
+ options = Options(argumentString="-D", validate=True)
+ self.failUnlessEqual(False, options.help)
+ self.failUnlessEqual(False, options.version)
+ self.failUnlessEqual(False, options.verbose)
+ self.failUnlessEqual(False, options.quiet)
+ self.failUnlessEqual(None, options.config)
+ self.failUnlessEqual(False, options.full)
+ self.failUnlessEqual(False, options.managed)
+ self.failUnlessEqual(False, options.managedOnly)
+ self.failUnlessEqual(None, options.logfile)
+ self.failUnlessEqual(None, options.owner)
+ self.failUnlessEqual(None, options.mode)
+ self.failUnlessEqual(False, options.output)
+ self.failUnlessEqual(False, options.debug)
+ self.failUnlessEqual(False, options.stacktrace)
+ self.failUnlessEqual(True, options.diagnostics)
+ self.failUnlessEqual([], options.actions)
+
+
############################
# Test comparison operators
############################
@@ -3032,6 +3319,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3048,6 +3336,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failUnlessEqual(options1, options2)
@@ -3079,6 +3368,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = False
@@ -3095,6 +3385,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3126,6 +3417,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3142,6 +3434,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3173,6 +3466,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3189,6 +3483,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3220,6 +3515,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3236,6 +3532,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3267,6 +3564,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3283,6 +3581,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3314,6 +3613,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3330,6 +3630,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3361,6 +3662,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3377,6 +3679,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3408,6 +3711,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3424,6 +3728,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3455,6 +3760,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3471,6 +3777,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3502,6 +3809,7 @@
options1.output = False
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3518,6 +3826,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3549,6 +3858,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3565,6 +3875,7 @@
options2.output = True
options2.debug = False
options1.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3596,6 +3907,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3612,6 +3924,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = True
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3643,6 +3956,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3659,6 +3973,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3690,6 +4005,7 @@
options1.output = True
options1.debug = True
options1.stacktrace = False
+ options1.diagnostics = False
options1.actions = ["collect", ]
options2.help = True
@@ -3706,6 +4022,7 @@
options2.output = True
options2.debug = True
options2.stacktrace = False
+ options2.diagnostics = False
options2.actions = ["collect", ]
self.failIfEqual(options1, options2)
@@ -3716,7 +4033,56 @@
self.failUnless(not options1 >= options2)
self.failUnless(options1 != options2)
+ def testComparison_017(self):
+ """
+ Test comparison of two identical objects, all attributes filled in, diagnostics different.
+ """
+ options1 = Options()
+ options2 = Options()
+ options1.help = True
+ options1.version = True
+ options1.verbose = True
+ options1.quiet = True
+ options1.config = "config"
+ options1.full = True
+ options1.managed = True
+ options1.managedOnly = True
+ options1.logfile = "logfile"
+ options1.owner = ("a", "b")
+ options1.mode = 0631
+ options1.output = True
+ options1.debug = True
+ options1.stacktrace = False
+ options1.diagnostics = False
+ options1.actions = ["collect", ]
+
+ options2.help = True
+ options2...
[truncated message content] |
|
From: <pro...@us...> - 2008-03-20 19:28:55
|
Revision: 893
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=893&view=rev
Author: pronovic
Date: 2008-03-20 12:28:51 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Add timestamp to diagnostics
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/util.py
cedar-backup2/trunk/test/utiltests.py
Modified: cedar-backup2/trunk/CedarBackup2/util.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 18:18:58 UTC (rev 892)
+++ cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 19:28:51 UTC (rev 893)
@@ -85,6 +85,7 @@
import logging
import string
import locale
+import datetime
from CedarBackup2.release import VERSION, DATE
@@ -987,6 +988,7 @@
values['platform'] = self.platform
values['encoding'] = self.encoding
values['locale'] = self.locale
+ values['timestamp'] = self.timestamp
return values;
def printDiagnostics(self, fd=sys.stdout, prefix=""):
@@ -1085,12 +1087,19 @@
Property target to get the default locale that is in effect.
"""
return locale.getdefaultlocale()[0]
+
+ def _getTimestamp(self):
+ """
+ Property target to get a current date/time stamp.
+ """
+ return datetime.datetime.utcnow().ctime() + " UTC"
version = property(_getVersion, None, None, "Cedar Backup version.")
interpreter = property(_getInterpreter, None, None, "Python interpreter version.")
platform = property(_getPlatform, None, None, "Platform identifying information.")
encoding = property(_getEncoding, None, None, "Filesystem encoding that is in effect.")
locale = property(_getLocale, None, None, "Locale that is in effect.")
+ timestamp = property(_getTimestamp, None, None, "Current timestamp.")
########################################################################
Modified: cedar-backup2/trunk/test/utiltests.py
===================================================================
--- cedar-backup2/trunk/test/utiltests.py 2008-03-20 18:18:58 UTC (rev 892)
+++ cedar-backup2/trunk/test/utiltests.py 2008-03-20 19:28:51 UTC (rev 893)
@@ -2069,6 +2069,7 @@
self.failUnlessEqual(diagnostics.platform, values['platform'])
self.failUnlessEqual(diagnostics.encoding, values['encoding'])
self.failUnlessEqual(diagnostics.locale, values['locale'])
+ self.failUnlessEqual(diagnostics.timestamp, values['timestamp'])
def testMethods_007(self):
"""
@@ -2091,7 +2092,15 @@
logger = logging.getLogger("CedarBackup2.test")
Diagnostics().logDiagnostics(logger.info)
+ def testMethods_010(self):
+ """
+ Test the timestamp attribute.
+ """
+ diagnostics = Diagnostics()
+ self.failIf(diagnostics.timestamp is None)
+ self.failIfEqual("", diagnostics.timestamp)
+
######################
# TestFunctions class
######################
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 18:19:00
|
Revision: 892
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=892&view=rev
Author: pronovic
Date: 2008-03-20 11:18:58 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Tweak diagnostics
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/util.py
cedar-backup2/trunk/test/utiltests.py
Modified: cedar-backup2/trunk/CedarBackup2/util.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 17:16:46 UTC (rev 891)
+++ cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 18:18:58 UTC (rev 892)
@@ -1044,7 +1044,7 @@
"""
Property target to get the Cedar Backup version.
"""
- return "Cedar Backup v%s (%s)" % (VERSION, DATE)
+ return "Cedar Backup %s (%s)" % (VERSION, DATE)
def _getInterpreter(self):
"""
Modified: cedar-backup2/trunk/test/utiltests.py
===================================================================
--- cedar-backup2/trunk/test/utiltests.py 2008-03-20 17:16:46 UTC (rev 891)
+++ cedar-backup2/trunk/test/utiltests.py 2008-03-20 18:18:58 UTC (rev 892)
@@ -2056,8 +2056,7 @@
Test the locale attribute.
"""
diagnostics = Diagnostics()
- self.failIf(diagnostics.locale is None)
- self.failIfEqual("", diagnostics.locale)
+ diagnostics.locale # might not be set, so just make sure method doesn't fail
def testMethods_006(self):
"""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 17:16:48
|
Revision: 891
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=891&view=rev
Author: pronovic
Date: 2008-03-20 10:16:46 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Clean up pychecker warnings
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/cli.py
cedar-backup2/trunk/CedarBackup2/util.py
Modified: cedar-backup2/trunk/CedarBackup2/cli.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/cli.py 2008-03-20 17:12:59 UTC (rev 890)
+++ cedar-backup2/trunk/CedarBackup2/cli.py 2008-03-20 17:16:46 UTC (rev 891)
@@ -89,7 +89,7 @@
from CedarBackup2.release import AUTHOR, EMAIL, VERSION, DATE, COPYRIGHT
from CedarBackup2.util import RestrictedContentList, DirectedGraph, PathResolverSingleton
from CedarBackup2.util import sortDict, splitCommandLine, executeCommand, getFunctionReference
-from CedarBackup2.util import getUidGid, encodePath
+from CedarBackup2.util import getUidGid, encodePath, Diagnostics
from CedarBackup2.config import Config
from CedarBackup2.peer import RemotePeer
from CedarBackup2.actions.collect import executeCollect
Modified: cedar-backup2/trunk/CedarBackup2/util.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 17:12:59 UTC (rev 890)
+++ cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 17:16:46 UTC (rev 891)
@@ -1019,11 +1019,11 @@
values = self.getValues()
keys = values.keys()
keys.sort()
- max = Diagnostics._getMaxLength(keys) + 3 # three extra dots in output
+ tmax = Diagnostics._getMaxLength(keys) + 3 # three extra dots in output
lines = []
for key in keys:
title = key.title()
- title += (max - len(title)) * '.'
+ title += (tmax - len(title)) * '.'
value = values[key]
line = "%s%s: %s" % (prefix, title, value)
lines.append(line)
@@ -1033,11 +1033,11 @@
"""
Get the maximum length from among a list of strings.
"""
- max = 0
+ tmax = 0
for value in values:
- if len(value) > max:
- max = len(value)
- return max
+ if len(value) > tmax:
+ tmax = len(value)
+ return tmax
_getMaxLength = staticmethod(_getMaxLength)
def _getVersion(self):
@@ -1063,20 +1063,22 @@
"""
Property target to get the operating system platform.
"""
- platform = sys.platform
- if platform.startswith("win"):
- WINDOWS_PLATFORMS = [ "Windows 3.1", "Windows 95/98/ME", "Windows NT/2000/XP", "Windows CE", ]
- wininfo = sys.getwindowsversion()
- winversion = "%d.%d.%d" % (wininfo[0], wininfo[1], wininfo[2])
- winplatform = WINDOWS_PLATFORMS[wininfo[3]]
- wintext = wininfo[4] # i.e. "Service Pack 2"
- return "%s (%s %s %s)" % (platform, winplatform, winversion, wintext)
- else:
- uname = os.uname()
- sysname = uname[0] # i.e. Linux
- release = uname[2] # i.e. 2.16.18-2
- machine = uname[4] # i.e. i686
- return "%s (%s %s %s)" % (platform, sysname, release, machine)
+ try:
+ if sys.platform.startswith("win"):
+ WINDOWS_PLATFORMS = [ "Windows 3.1", "Windows 95/98/ME", "Windows NT/2000/XP", "Windows CE", ]
+ wininfo = sys.getwindowsversion()
+ winversion = "%d.%d.%d" % (wininfo[0], wininfo[1], wininfo[2])
+ winplatform = WINDOWS_PLATFORMS[wininfo[3]]
+ wintext = wininfo[4] # i.e. "Service Pack 2"
+ return "%s (%s %s %s)" % (sys.platform, winplatform, winversion, wintext)
+ else:
+ uname = os.uname()
+ sysname = uname[0] # i.e. Linux
+ release = uname[2] # i.e. 2.16.18-2
+ machine = uname[4] # i.e. i686
+ return "%s (%s %s %s)" % (sys.platform, sysname, release, machine)
+ except AttributeError:
+ return sys.platform
def _getLocale(self):
"""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 17:13:02
|
Revision: 890
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=890&view=rev
Author: pronovic
Date: 2008-03-20 10:12:59 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Log diagnostic information on startup
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/cli.py
cedar-backup2/trunk/Changelog
Modified: cedar-backup2/trunk/CedarBackup2/cli.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/cli.py 2008-03-20 17:10:32 UTC (rev 889)
+++ cedar-backup2/trunk/CedarBackup2/cli.py 2008-03-20 17:12:59 UTC (rev 890)
@@ -218,6 +218,7 @@
logger.info("Cedar Backup run started.")
logger.info("Options were [%s]" % options)
logger.info("Logfile is [%s]" % logfile)
+ Diagnostics().logDiagnostics(method=logger.info)
if options.config is None:
logger.debug("Using default configuration file.")
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-20 17:10:32 UTC (rev 889)
+++ cedar-backup2/trunk/Changelog 2008-03-20 17:12:59 UTC (rev 890)
@@ -1,7 +1,10 @@
Version 2.16.1 unreleased
- * Add diagnostic info to the unit test output, and ask for it in INSTALL.
* Change suggested execution index for Capacity extension in manual.
+ * Provide support for application-wide diagnostic reporting.
+ - Add util.Diagnostics class to encapsulate information
+ - Log diagnostics when Cedar Backup first starts
+ - Print diagnostics when running unit tests
* Clean up filesystem code that deals with file age, and improve unit tests.
- Some platforms apparently cannot set file ages precisely
- Change calculateFileAge() to use floats throughout, which is safer
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 17:10:34
|
Revision: 889
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=889&view=rev
Author: pronovic
Date: 2008-03-20 10:10:32 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Refactor diagnostics into a new Diagnostics class
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/util.py
cedar-backup2/trunk/test/utiltests.py
cedar-backup2/trunk/util/test.py
Modified: cedar-backup2/trunk/CedarBackup2/util.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 05:19:11 UTC (rev 888)
+++ cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 17:10:32 UTC (rev 889)
@@ -84,7 +84,10 @@
import time
import logging
import string
+import locale
+from CedarBackup2.release import VERSION, DATE
+
try:
import pwd
import grp
@@ -942,6 +945,153 @@
########################################################################
+# Diagnostics class definition
+########################################################################
+
+class Diagnostics(object):
+
+ """
+ Class holding runtime diagnostic information.
+
+ Diagnostic information is information that is useful to get from users for
+ debugging purposes. I'm consolidating it all here into one object.
+
+ @sort: __init__, __repr__, __str__, __cmp__
+ """
+
+ def __init__(self):
+ """
+ Constructor for the C{Diagnostics} class.
+ """
+
+ def __repr__(self):
+ """
+ Official string representation for class instance.
+ """
+ return "Diagnostics()"
+
+ def __str__(self):
+ """
+ Informal string representation for class instance.
+ """
+ return self.__repr__()
+
+ def getValues(self):
+ """
+ Get a values map for each diagnostic.
+ @return: Map from diagnostic name to diagnostic value.
+ """
+ values = {}
+ values['version'] = self.version
+ values['interpreter'] = self.interpreter
+ values['platform'] = self.platform
+ values['encoding'] = self.encoding
+ values['locale'] = self.locale
+ return values;
+
+ def printDiagnostics(self, fd=sys.stdout, prefix=""):
+ """
+ Pretty-print diagnostic information to a file descriptor.
+ @param fd: File descriptor used to print information.
+ @param prefix: Prefix string (if any) to place onto printed lines
+ @note: The C{fd} is used rather than C{print} to facilitate unit testing.
+ """
+ lines = self._buildDiagnosticLines(prefix)
+ for line in lines:
+ fd.write("%s\n" % line)
+
+ def logDiagnostics(self, method, prefix=""):
+ """
+ Pretty-print diagnostic information to the logger.
+ @param method: Logger method to use for logging (i.e. logger.info)
+ @param prefix: Prefix string (if any) to place onto printed lines
+ """
+ lines = self._buildDiagnosticLines(prefix)
+ for line in lines:
+ method("%s" % line)
+
+ def _buildDiagnosticLines(self, prefix=""):
+ """
+ Build a set of pretty-printed diagnostic lines.
+ @param prefix: Prefix string (if any) to place onto printed lines
+ @return: List of strings, not terminated by newlines.
+ """
+ values = self.getValues()
+ keys = values.keys()
+ keys.sort()
+ max = Diagnostics._getMaxLength(keys) + 3 # three extra dots in output
+ lines = []
+ for key in keys:
+ title = key.title()
+ title += (max - len(title)) * '.'
+ value = values[key]
+ line = "%s%s: %s" % (prefix, title, value)
+ lines.append(line)
+ return lines
+
+ def _getMaxLength(values):
+ """
+ Get the maximum length from among a list of strings.
+ """
+ max = 0
+ for value in values:
+ if len(value) > max:
+ max = len(value)
+ return max
+ _getMaxLength = staticmethod(_getMaxLength)
+
+ def _getVersion(self):
+ """
+ Property target to get the Cedar Backup version.
+ """
+ return "Cedar Backup v%s (%s)" % (VERSION, DATE)
+
+ def _getInterpreter(self):
+ """
+ Property target to get the Python interpreter version.
+ """
+ version = sys.version_info
+ return "Python %d.%d.%d (%s)" % (version[0], version[1], version[2], version[3])
+
+ def _getEncoding(self):
+ """
+ Property target to get the filesystem encoding.
+ """
+ return sys.getfilesystemencoding() or sys.getdefaultencoding()
+
+ def _getPlatform(self):
+ """
+ Property target to get the operating system platform.
+ """
+ platform = sys.platform
+ if platform.startswith("win"):
+ WINDOWS_PLATFORMS = [ "Windows 3.1", "Windows 95/98/ME", "Windows NT/2000/XP", "Windows CE", ]
+ wininfo = sys.getwindowsversion()
+ winversion = "%d.%d.%d" % (wininfo[0], wininfo[1], wininfo[2])
+ winplatform = WINDOWS_PLATFORMS[wininfo[3]]
+ wintext = wininfo[4] # i.e. "Service Pack 2"
+ return "%s (%s %s %s)" % (platform, winplatform, winversion, wintext)
+ else:
+ uname = os.uname()
+ sysname = uname[0] # i.e. Linux
+ release = uname[2] # i.e. 2.16.18-2
+ machine = uname[4] # i.e. i686
+ return "%s (%s %s %s)" % (platform, sysname, release, machine)
+
+ def _getLocale(self):
+ """
+ Property target to get the default locale that is in effect.
+ """
+ return locale.getdefaultlocale()[0]
+
+ version = property(_getVersion, None, None, "Cedar Backup version.")
+ interpreter = property(_getInterpreter, None, None, "Python interpreter version.")
+ platform = property(_getPlatform, None, None, "Platform identifying information.")
+ encoding = property(_getEncoding, None, None, "Filesystem encoding that is in effect.")
+ locale = property(_getLocale, None, None, "Locale that is in effect.")
+
+
+########################################################################
# General utility functions
########################################################################
Modified: cedar-backup2/trunk/test/utiltests.py
===================================================================
--- cedar-backup2/trunk/test/utiltests.py 2008-03-20 05:19:11 UTC (rev 888)
+++ cedar-backup2/trunk/test/utiltests.py 2008-03-20 17:10:32 UTC (rev 889)
@@ -9,7 +9,7 @@
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
-# Copyright (c) 2004-2007 Kenneth J. Pronovici.
+# Copyright (c) 2004-2008 Kenneth J. Pronovici.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or
@@ -79,12 +79,13 @@
import unittest
import tempfile
import time
+import logging
from os.path import isdir
-from CedarBackup2.testutil import findResources, removedir, platformHasEcho, platformWindows
+from CedarBackup2.testutil import findResources, removedir, platformHasEcho, platformWindows, captureOutput
from CedarBackup2.util import UnorderedList, AbsolutePathList, ObjectTypeList
from CedarBackup2.util import RestrictedContentList, RegexMatchList, RegexList
-from CedarBackup2.util import DirectedGraph, PathResolverSingleton
+from CedarBackup2.util import DirectedGraph, PathResolverSingleton, Diagnostics
from CedarBackup2.util import sortDict, resolveCommand, executeCommand, getFunctionReference, encodePath
from CedarBackup2.util import convertSize, UNIT_BYTES, UNIT_SECTORS, UNIT_KBYTES, UNIT_MBYTES, UNIT_GBYTES
from CedarBackup2.util import displayBytes, deriveDayOfWeek, isStartOfWeek
@@ -2010,6 +2011,88 @@
self.failUnlessEqual(result, "/path/to/two")
+########################
+# TestDiagnostics class
+########################
+
+class TestDiagnostics(unittest.TestCase):
+
+ """Tests for the Diagnostics class."""
+
+ def testMethods_001(self):
+ """
+ Test the version attribute.
+ """
+ diagnostics = Diagnostics()
+ self.failIf(diagnostics.version is None)
+ self.failIfEqual("", diagnostics.version)
+
+ def testMethods_002(self):
+ """
+ Test the interpreter attribute.
+ """
+ diagnostics = Diagnostics()
+ self.failIf(diagnostics.interpreter is None)
+ self.failIfEqual("", diagnostics.interpreter)
+
+ def testMethods_003(self):
+ """
+ Test the platform attribute.
+ """
+ diagnostics = Diagnostics()
+ self.failIf(diagnostics.platform is None)
+ self.failIfEqual("", diagnostics.platform)
+
+ def testMethods_004(self):
+ """
+ Test the encoding attribute.
+ """
+ diagnostics = Diagnostics()
+ self.failIf(diagnostics.encoding is None)
+ self.failIfEqual("", diagnostics.encoding)
+
+ def testMethods_005(self):
+ """
+ Test the locale attribute.
+ """
+ diagnostics = Diagnostics()
+ self.failIf(diagnostics.locale is None)
+ self.failIfEqual("", diagnostics.locale)
+
+ def testMethods_006(self):
+ """
+ Test the getValues() method.
+ """
+ diagnostics = Diagnostics()
+ values = diagnostics.getValues()
+ self.failUnlessEqual(diagnostics.version, values['version'])
+ self.failUnlessEqual(diagnostics.interpreter, values['interpreter'])
+ self.failUnlessEqual(diagnostics.platform, values['platform'])
+ self.failUnlessEqual(diagnostics.encoding, values['encoding'])
+ self.failUnlessEqual(diagnostics.locale, values['locale'])
+
+ def testMethods_007(self):
+ """
+ Test the _buildDiagnosticLines() method.
+ """
+ values = Diagnostics().getValues()
+ lines = Diagnostics()._buildDiagnosticLines()
+ self.failUnlessEqual(len(values), len(lines))
+
+ def testMethods_008(self):
+ """
+ Test the printDiagnostics() method.
+ """
+ captureOutput(Diagnostics().printDiagnostics)
+
+ def testMethods_009(self):
+ """
+ Test the logDiagnostics() method.
+ """
+ logger = logging.getLogger("CedarBackup2.test")
+ Diagnostics().logDiagnostics(logger.info)
+
+
######################
# TestFunctions class
######################
@@ -3836,6 +3919,7 @@
unittest.makeSuite(TestRegexList, 'test'),
unittest.makeSuite(TestDirectedGraph, 'test'),
unittest.makeSuite(TestPathResolverSingleton, 'test'),
+ unittest.makeSuite(TestDiagnostics, 'test'),
unittest.makeSuite(TestFunctions, 'test'),
))
Modified: cedar-backup2/trunk/util/test.py
===================================================================
--- cedar-backup2/trunk/util/test.py 2008-03-20 05:19:11 UTC (rev 888)
+++ cedar-backup2/trunk/util/test.py 2008-03-20 17:10:32 UTC (rev 889)
@@ -94,37 +94,7 @@
import logging
import unittest
-##############################
-# printDiagnostics() function
-##############################
-def printDiagnostics():
- """
- Print useful diagnostic information to the screen.
-
- This is the kind of information I usually ask for when I get a bug report.
- If I print it out here, I shouldn't have to ask for it as often, since
- people typically email me the test output.
- """
- try:
- windowsversion = sys.getwindowsversion()
- except AttributeError:
- windowsversion = "N/A"
-
- try:
- uname = "%s %s %s" % (os.uname()[0], os.uname()[2], os.uname()[4])
- except AttributeError:
- uname = "N/A"
-
- print ""
- print "Diagnostics:"
- print " version.....:", sys.version_info
- print " encoding....: %s" % sys.getfilesystemencoding() or sys.getdefaultencoding()
- print " platform....: %s" % sys.platform
- print " win32.......:", windowsversion
- print " uname.......: %s" % uname
-
-
##################
# main() function
##################
@@ -157,7 +127,7 @@
print "location. If the import succeeds, you may be using an"
print "unexpected version of CedarBackup2."
print ""
- from CedarBackup2.util import nullDevice
+ from CedarBackup2.util import nullDevice, Diagnostics
except ImportError, e:
print "Failed to import CedarBackup2 util module: %s" % e
print "You must either run the unit tests from the CedarBackup2 source"
@@ -253,7 +223,8 @@
if args != []: print "*** Executing specific tests: %s" % unittests.keys()
# Print some diagnostic information
- printDiagnostics()
+ print ""
+ Diagnostics().printDiagnostics(prefix="*** ")
# Create and run the test suite
print ""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 05:19:15
|
Revision: 888
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=888&view=rev
Author: pronovic
Date: 2008-03-19 22:19:11 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Fix filesystemtests.TestBackupFileList.testGenerateFitted_004()
Modified Paths:
--------------
cedar-backup2/trunk/test/filesystemtests.py
Modified: cedar-backup2/trunk/test/filesystemtests.py
===================================================================
--- cedar-backup2/trunk/test/filesystemtests.py 2008-03-20 05:15:57 UTC (rev 887)
+++ cedar-backup2/trunk/test/filesystemtests.py 2008-03-20 05:19:11 UTC (rev 888)
@@ -16271,7 +16271,7 @@
fittedList = backupList.generateFitted(80)
self.failUnlessEqual(1, len(fittedList))
self.failUnless((self.buildPath([ "tree9", "dir002", "file002", ]) in fittedList) or
- (self.buildPath([ "tree9", "dir002", "link004", ] in fittedList)))
+ (self.buildPath([ "tree9", "dir002", "link004", ]) in fittedList))
else:
self.failUnlessEqual(15, count)
self.failUnlessEqual(15, len(backupList))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 05:15:58
|
Revision: 887
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=887&view=rev
Author: pronovic
Date: 2008-03-19 22:15:57 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Ugh,it's getting late
Modified Paths:
--------------
cedar-backup2/trunk/util/test.py
Modified: cedar-backup2/trunk/util/test.py
===================================================================
--- cedar-backup2/trunk/util/test.py 2008-03-20 05:13:09 UTC (rev 886)
+++ cedar-backup2/trunk/util/test.py 2008-03-20 05:15:57 UTC (rev 887)
@@ -112,7 +112,7 @@
windowsversion = "N/A"
try:
- uname = "%s %s %s" % (sys.uname[0], sys.uname[2], sys.uname[4])
+ uname = "%s %s %s" % (os.uname()[0], os.uname()[2], os.uname()[4])
except AttributeError:
uname = "N/A"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 05:13:13
|
Revision: 886
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=886&view=rev
Author: pronovic
Date: 2008-03-19 22:13:09 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
More tweaks to windows output
Modified Paths:
--------------
cedar-backup2/trunk/util/test.py
Modified: cedar-backup2/trunk/util/test.py
===================================================================
--- cedar-backup2/trunk/util/test.py 2008-03-20 05:11:51 UTC (rev 885)
+++ cedar-backup2/trunk/util/test.py 2008-03-20 05:13:09 UTC (rev 886)
@@ -112,7 +112,7 @@
windowsversion = "N/A"
try:
- uname = os.uname()
+ uname = "%s %s %s" % (sys.uname[0], sys.uname[2], sys.uname[4])
except AttributeError:
uname = "N/A"
@@ -121,8 +121,8 @@
print " version.....:", sys.version_info
print " encoding....: %s" % sys.getfilesystemencoding() or sys.getdefaultencoding()
print " platform....: %s" % sys.platform
- print " win32.......: %s ", windowsversion
- print " uname.......: %s %s %s" % (uname[0], uname[2], uname[4])
+ print " win32.......:", windowsversion
+ print " uname.......: %s" % uname
##################
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 05:11:53
|
Revision: 885
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=885&view=rev
Author: pronovic
Date: 2008-03-19 22:11:51 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Tweak output on windows
Modified Paths:
--------------
cedar-backup2/trunk/util/test.py
Modified: cedar-backup2/trunk/util/test.py
===================================================================
--- cedar-backup2/trunk/util/test.py 2008-03-20 05:10:01 UTC (rev 884)
+++ cedar-backup2/trunk/util/test.py 2008-03-20 05:11:51 UTC (rev 885)
@@ -121,7 +121,7 @@
print " version.....:", sys.version_info
print " encoding....: %s" % sys.getfilesystemencoding() or sys.getdefaultencoding()
print " platform....: %s" % sys.platform
- print " win32.......: %s " % windowsversion
+ print " win32.......: %s ", windowsversion
print " uname.......: %s %s %s" % (uname[0], uname[2], uname[4])
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 05:10:04
|
Revision: 884
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=884&view=rev
Author: pronovic
Date: 2008-03-19 22:10:01 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Add diagnostic info to unit test output
Modified Paths:
--------------
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/INSTALL
cedar-backup2/trunk/util/test.py
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-20 04:25:33 UTC (rev 883)
+++ cedar-backup2/trunk/Changelog 2008-03-20 05:10:01 UTC (rev 884)
@@ -1,5 +1,6 @@
Version 2.16.1 unreleased
+ * Add diagnostic info to the unit test output, and ask for it in INSTALL.
* Change suggested execution index for Capacity extension in manual.
* Clean up filesystem code that deals with file age, and improve unit tests.
- Some platforms apparently cannot set file ages precisely
Modified: cedar-backup2/trunk/INSTALL
===================================================================
--- cedar-backup2/trunk/INSTALL 2008-03-20 04:25:33 UTC (rev 883)
+++ cedar-backup2/trunk/INSTALL 2008-03-20 05:10:01 UTC (rev 884)
@@ -37,5 +37,6 @@
python util/test.py
If any unit test reports a failure on your system, please email me the
-output from the unit test, so I can fix the problem.
-
+output from the unit test, so I can fix the problem. Please make sure
+to include the diagnostic information printed out at the beginning of
+the test run.
Modified: cedar-backup2/trunk/util/test.py
===================================================================
--- cedar-backup2/trunk/util/test.py 2008-03-20 04:25:33 UTC (rev 883)
+++ cedar-backup2/trunk/util/test.py 2008-03-20 05:10:01 UTC (rev 884)
@@ -94,7 +94,37 @@
import logging
import unittest
+##############################
+# printDiagnostics() function
+##############################
+def printDiagnostics():
+ """
+ Print useful diagnostic information to the screen.
+
+ This is the kind of information I usually ask for when I get a bug report.
+ If I print it out here, I shouldn't have to ask for it as often, since
+ people typically email me the test output.
+ """
+ try:
+ windowsversion = sys.getwindowsversion()
+ except AttributeError:
+ windowsversion = "N/A"
+
+ try:
+ uname = os.uname()
+ except AttributeError:
+ uname = "N/A"
+
+ print ""
+ print "Diagnostics:"
+ print " version.....:", sys.version_info
+ print " encoding....: %s" % sys.getfilesystemencoding() or sys.getdefaultencoding()
+ print " platform....: %s" % sys.platform
+ print " win32.......: %s " % windowsversion
+ print " uname.......: %s %s %s" % (uname[0], uname[2], uname[4])
+
+
##################
# main() function
##################
@@ -222,6 +252,9 @@
if args == [] or "capacity" in args: unittests["capacity"] = capacitytests.suite()
if args != []: print "*** Executing specific tests: %s" % unittests.keys()
+ # Print some diagnostic information
+ printDiagnostics()
+
# Create and run the test suite
print ""
suite = unittest.TestSuite(unittests.values())
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 04:25:37
|
Revision: 883
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=883&view=rev
Author: pronovic
Date: 2008-03-19 21:25:33 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Tagging the 2.16.1pre1 release of Cedar Backup.
Added Paths:
-----------
cedar-backup2/tags/CEDAR_BACKUP2_V2.16.1pre1/
Copied: cedar-backup2/tags/CEDAR_BACKUP2_V2.16.1pre1 (from rev 882, cedar-backup2/trunk)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 04:25:22
|
Revision: 882
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=882&view=rev
Author: pronovic
Date: 2008-03-19 21:25:16 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Add source target
Modified Paths:
--------------
cedar-backup2/trunk/Makefile
Modified: cedar-backup2/trunk/Makefile
===================================================================
--- cedar-backup2/trunk/Makefile 2008-03-20 04:23:34 UTC (rev 881)
+++ cedar-backup2/trunk/Makefile 2008-03-20 04:25:16 UTC (rev 882)
@@ -170,6 +170,10 @@
@$(SETUP) sdist --dist-dir $(SDIST_DIR)
@$(CP) $(SDIST_DIR)/CedarBackup2-$(VERSION).tar.gz ../
+source: $(SDIST_DIR)
+ @$(SETUP) sdist --dist-dir $(SDIST_DIR)
+ @$(CP) $(SDIST_DIR)/CedarBackup2-$(VERSION).tar.gz ../
+
$(SDIST_DIR):
@$(MKDIR) -p $(SDIST_DIR)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 04:23:45
|
Revision: 881
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=881&view=rev
Author: pronovic
Date: 2008-03-19 21:23:34 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Release 2.16.1pre1 to mail to user for testing
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/release.py
Modified: cedar-backup2/trunk/CedarBackup2/release.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/release.py 2008-03-20 04:19:19 UTC (rev 880)
+++ cedar-backup2/trunk/CedarBackup2/release.py 2008-03-20 04:23:34 UTC (rev 881)
@@ -34,7 +34,7 @@
AUTHOR = "Kenneth J. Pronovici"
EMAIL = "pro...@ie..."
COPYRIGHT = "2004-2008"
-VERSION = "2.16.0"
-DATE = "18 Mar 2008"
+VERSION = "2.16.1pre1"
+DATE = "19 Mar 2008"
URL = "http://cedar-solutions.com/software/cedar-backup"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 04:19:24
|
Revision: 880
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=880&view=rev
Author: pronovic
Date: 2008-03-19 21:19:19 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Fix filesystemtests.TestBackupFileList.testGenerateFitted_004()
Modified Paths:
--------------
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/test/filesystemtests.py
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-20 04:00:23 UTC (rev 879)
+++ cedar-backup2/trunk/Changelog 2008-03-20 04:19:19 UTC (rev 880)
@@ -1,14 +1,15 @@
Version 2.16.1 unreleased
- * Change suggested execution index for Capacity in manual.
- * Fix utiltests.TestFunctions.testNullDevice_001() for Windows 2000.
- * Fix typo in filesystemtests.TestFilesystemList.testRemoveLinks_002().
+ * Change suggested execution index for Capacity extension in manual.
* Clean up filesystem code that deals with file age, and improve unit tests.
- Some platforms apparently cannot set file ages precisely
- Change calculateFileAge() to use floats throughout, which is safer
- Change removeYoungFiles() to explicitly check on whole days
- Put a 1-second fudge factor into unit tests when setting file ages
- - This is really a test-only bug, but better safe than sorry
+ * Fix some unit test failures discovered on Windows 2000.
+ - Fix utiltests.TestFunctions.testNullDevice_001()
+ - Fix filesystemtests.TestBackupFileList.testGenerateFitted_004()
+ - Fix typo in filesystemtests.TestFilesystemList.testRemoveLinks_002()
Version 2.16.0 18 Mar 2008
Modified: cedar-backup2/trunk/test/filesystemtests.py
===================================================================
--- cedar-backup2/trunk/test/filesystemtests.py 2008-03-20 04:00:23 UTC (rev 879)
+++ cedar-backup2/trunk/test/filesystemtests.py 2008-03-20 04:19:19 UTC (rev 880)
@@ -16243,6 +16243,13 @@
"""
Test on a non-empty list containing only valid entries, some of which
fit.
+
+ We can get some strange behavior on Windows, which hits the "links not
+ supported" case. The file tree9/dir002/file002 is 74 bytes, and is
+ supposed to be the only file included because links are not recognized.
+ However, link004 points at file002, and apparently Windows (sometimes?)
+ sees link004 as a real file with a size of 74 bytes. Since only one of
+ the two fits in the fitted list, we just check for one or the other.
"""
self.extractTar("tree9")
path = self.buildPath(["tree9"])
@@ -16263,7 +16270,8 @@
self.failUnless(self.buildPath([ "tree9", "file002", ]) in backupList)
fittedList = backupList.generateFitted(80)
self.failUnlessEqual(1, len(fittedList))
- self.failUnless(self.buildPath([ "tree9", "dir001", "file002", ]) in fittedList)
+ self.failUnless((self.buildPath([ "tree9", "dir002", "file002", ]) in fittedList) or
+ (self.buildPath([ "tree9", "dir002", "link004", ] in fittedList)))
else:
self.failUnlessEqual(15, count)
self.failUnlessEqual(15, len(backupList))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 04:00:31
|
Revision: 879
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=879&view=rev
Author: pronovic
Date: 2008-03-19 21:00:23 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Clean up filesystem code that deals with file age, and improve unit tests.
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/filesystem.py
cedar-backup2/trunk/CedarBackup2/testutil.py
cedar-backup2/trunk/CedarBackup2/util.py
cedar-backup2/trunk/Changelog
Modified: cedar-backup2/trunk/CedarBackup2/filesystem.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/filesystem.py 2008-03-20 02:42:35 UTC (rev 878)
+++ cedar-backup2/trunk/CedarBackup2/filesystem.py 2008-03-20 04:00:23 UTC (rev 879)
@@ -52,6 +52,7 @@
import os
import re
import sha
+import math
import logging
import tarfile
@@ -1305,8 +1306,9 @@
for entry in self[:]:
if os.path.isfile(entry) and not os.path.islink(entry):
try:
- age = calculateFileAge(entry)
- if age < daysOld:
+ ageInDays = calculateFileAge(entry)
+ ageInWholeDays = math.floor(ageInDays)
+ if ageInWholeDays < daysOld:
removed += 1
self.remove(entry)
except OSError:
Modified: cedar-backup2/trunk/CedarBackup2/testutil.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/testutil.py 2008-03-20 02:42:35 UTC (rev 878)
+++ cedar-backup2/trunk/CedarBackup2/testutil.py 2008-03-20 04:00:23 UTC (rev 879)
@@ -219,16 +219,25 @@
def changeFileAge(filename, subtract=None):
"""
Changes a file age using the C{os.utime} function.
+
+ @note: Some platforms don't seem to be able to set an age precisely. As a
+ result, whereas we might have intended to set an age of 86400 seconds, we
+ actually get an age of 86399.375 seconds. When util.calculateFileAge()
+ looks at that the file, it calculates an age of 0.999992766204 days, which
+ then gets truncated down to zero whole days. The tests get very confused.
+ To work around this, I always subtract off one additional second as a fudge
+ factor. That way, the file age will be I{at least} as old as requested
+ later on.
+
@param filename: File to operate on.
@param subtract: Number of seconds to subtract from the current time.
@raise ValueError: If a path cannot be encoded properly.
"""
filename = encodePath(filename)
- if subtract is None:
- os.utime(filename, None)
- else:
- newTime = time.time() - subtract
- os.utime(filename, (newTime, newTime))
+ newTime = time.time() - 1;
+ if subtract is not None:
+ newTime -= subtract
+ os.utime(filename, (newTime, newTime))
###########################
Modified: cedar-backup2/trunk/CedarBackup2/util.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 02:42:35 UTC (rev 878)
+++ cedar-backup2/trunk/CedarBackup2/util.py 2008-03-20 04:00:23 UTC (rev 879)
@@ -8,7 +8,7 @@
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
-# Copyright (c) 2004-2007 Kenneth J. Pronovici.
+# Copyright (c) 2004-2008 Kenneth J. Pronovici.
# All rights reserved.
#
# Portions copyright (c) 2001, 2002 Python Software Foundation.
@@ -119,9 +119,9 @@
BYTES_PER_MBYTE = BYTES_PER_KBYTE * KBYTES_PER_MBYTE
BYTES_PER_GBYTE = BYTES_PER_MBYTE * MBYTES_PER_GBYTE
-SECONDS_PER_MINUTE = 60
-MINUTES_PER_HOUR = 60
-HOURS_PER_DAY = 24
+SECONDS_PER_MINUTE = 60.0
+MINUTES_PER_HOUR = 60.0
+HOURS_PER_DAY = 24.0
SECONDS_PER_DAY = SECONDS_PER_MINUTE * MINUTES_PER_HOUR * HOURS_PER_DAY
UNIT_BYTES = 0
@@ -1415,13 +1415,14 @@
@param file: Path to a file on disk.
- @return: Age of the file in days.
+ @return: Age of the file in days (possibly fractional).
@raise OSError: If the file doesn't exist.
"""
currentTime = int(time.time())
fileStats = os.stat(file)
lastUse = max(fileStats.st_atime, fileStats.st_mtime) # "most recent" is "largest"
- ageInDays = (currentTime - lastUse) / SECONDS_PER_DAY
+ ageInSeconds = currentTime - lastUse
+ ageInDays = ageInSeconds / SECONDS_PER_DAY
return ageInDays
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-20 02:42:35 UTC (rev 878)
+++ cedar-backup2/trunk/Changelog 2008-03-20 04:00:23 UTC (rev 879)
@@ -1,8 +1,14 @@
-Version 2.16.0 unreleased
+Version 2.16.1 unreleased
* Change suggested execution index for Capacity in manual.
* Fix utiltests.TestFunctions.testNullDevice_001() for Windows 2000.
* Fix typo in filesystemtests.TestFilesystemList.testRemoveLinks_002().
+ * Clean up filesystem code that deals with file age, and improve unit tests.
+ - Some platforms apparently cannot set file ages precisely
+ - Change calculateFileAge() to use floats throughout, which is safer
+ - Change removeYoungFiles() to explicitly check on whole days
+ - Put a 1-second fudge factor into unit tests when setting file ages
+ - This is really a test-only bug, but better safe than sorry
Version 2.16.0 18 Mar 2008
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2008-03-20 02:42:38
|
Revision: 878
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=878&view=rev
Author: pronovic
Date: 2008-03-19 19:42:35 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Fix typo in filesystemtests.TestFilesystemList.testRemoveLinks_002().
Modified Paths:
--------------
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/test/filesystemtests.py
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-03-20 02:16:26 UTC (rev 877)
+++ cedar-backup2/trunk/Changelog 2008-03-20 02:42:35 UTC (rev 878)
@@ -2,6 +2,7 @@
* Change suggested execution index for Capacity in manual.
* Fix utiltests.TestFunctions.testNullDevice_001() for Windows 2000.
+ * Fix typo in filesystemtests.TestFilesystemList.testRemoveLinks_002().
Version 2.16.0 18 Mar 2008
Modified: cedar-backup2/trunk/test/filesystemtests.py
===================================================================
--- cedar-backup2/trunk/test/filesystemtests.py 2008-03-20 02:16:26 UTC (rev 877)
+++ cedar-backup2/trunk/test/filesystemtests.py 2008-03-20 02:42:35 UTC (rev 878)
@@ -9794,7 +9794,7 @@
fsList = FilesystemList()
count = fsList.removeLinks(pattern="pattern")
self.failUnlessEqual(0, count)
- self.failUnlessRaises(ValueError, fsList.removeLinks, pattern="*.jpg")
+ self.failUnlessRaises(ValueError, fsList.removeLinks, pattern="*.jpg")
def testRemoveLinks_003(self):
"""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|