cedar-backup-svn Mailing List for Cedar Backup (Page 6)
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...> - 2010-06-04 00:50:31
|
Revision: 977
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=977&view=rev
Author: pronovic
Date: 2010-06-04 00:50:25 +0000 (Fri, 04 Jun 2010)
Log Message:
-----------
Convert to build on my dev box
Modified Paths:
--------------
web/trunk/cedar-backup/GTMLMakefile
web/trunk/cedar-backup/project.gtp
Modified: web/trunk/cedar-backup/GTMLMakefile
===================================================================
--- web/trunk/cedar-backup/GTMLMakefile 2010-06-03 01:42:13 UTC (rev 976)
+++ web/trunk/cedar-backup/GTMLMakefile 2010-06-04 00:50:25 UTC (rev 977)
@@ -11,8 +11,8 @@
##############
OUTPUT_FILES = \
+ source/index.html \
source/gpl.html \
- source/index.html \
source/terms.html
#####################
@@ -35,16 +35,16 @@
# File dependencies #
#####################
-source/index.gtml: /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/site-wide.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/header.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/content_header.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/content_footer.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/footer.gth
+source/index.gtml: /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/site-wide.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/header.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/content_header.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/content_footer.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/footer.gth
touch $@
-/home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/header.gth: /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/copyright.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/copyright.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/copyright.gth
+source/gpl.gtml: /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/site-wide.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/header.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/content_header.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/content_footer.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/footer.gth
touch $@
-source/gpl.gtml: /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/site-wide.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/header.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/content_header.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/content_footer.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/footer.gth
+source/index.html: project.gtp source/index.gtml
+/home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/header.gth: /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/copyright.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/copyright.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/copyright.gth
touch $@
-source/index.html: project.gtp source/index.gtml
source/terms.html: project.gtp source/terms.gtml
source/gpl.html: project.gtp source/gpl.gtml
-source/terms.gtml: /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/site-wide.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/header.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/content_header.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/copyright.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/content_footer.gth /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config/footer.gth
+source/terms.gtml: /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/site-wide.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/header.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/content_header.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/copyright.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/content_footer.gth /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config/footer.gth
touch $@
# End of makefile.
Modified: web/trunk/cedar-backup/project.gtp
===================================================================
--- web/trunk/cedar-backup/project.gtp 2010-06-03 01:42:13 UTC (rev 976)
+++ web/trunk/cedar-backup/project.gtp 2010-06-04 00:50:25 UTC (rev 977)
@@ -1,5 +1,5 @@
// Make sure that it can find the "global" include files
-define INCLUDE_PATH /home/users/p/pr/pronovic/projects/dev/web/cedar-backup/config
+define INCLUDE_PATH /home/pronovic/projects/dev/web/cedar-backup.sourceforge.net/config
// And work for every .gtml file it can find. If I need to
// I can use file.txt..gtml or file.gtml..html to skip
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-06-03 01:42:19
|
Revision: 976
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=976&view=rev
Author: pronovic
Date: 2010-06-03 01:42:13 +0000 (Thu, 03 Jun 2010)
Log Message:
-----------
Add Google site verification
Modified Paths:
--------------
web/trunk/cedar-backup/config/header.gth
Modified: web/trunk/cedar-backup/config/header.gth
===================================================================
--- web/trunk/cedar-backup/config/header.gth 2010-06-01 15:15:16 UTC (rev 975)
+++ web/trunk/cedar-backup/config/header.gth 2010-06-03 01:42:13 UTC (rev 976)
@@ -10,6 +10,7 @@
<meta name="author" content="<<SITE_OWNER>>"/>
<meta name="keywords" content="<<PAGE_KEYWORDS>>">
<meta name="description" content="<<PAGE_DESCRIPTION>>">
+ <meta name="google-site-verification" content="NodwmqotlVxAAhJ15aV7eK7KcFlxqEWlN8CVwsTiFZs" />
<link rel="icon" href="/favicon.ico" type="image/ico">
<link rel="shortcut icon" href="/favicon.ico" type="image/ico">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-06-01 15:15:26
|
Revision: 975
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=975&view=rev
Author: pronovic
Date: 2010-06-01 15:15:16 +0000 (Tue, 01 Jun 2010)
Log Message:
-----------
Add a note about using real device name
Modified Paths:
--------------
cedar-backup2/trunk/manual/src/config.xml
Modified: cedar-backup2/trunk/manual/src/config.xml
===================================================================
--- cedar-backup2/trunk/manual/src/config.xml 2010-05-22 17:01:12 UTC (rev 974)
+++ cedar-backup2/trunk/manual/src/config.xml 2010-06-01 15:15:16 UTC (rev 975)
@@ -2284,8 +2284,8 @@
</para>
<para>
This is the UNIX device name for the writer drive, for
- instance <filename>/dev/scd0</filename> or
- <filename>/dev/cdrw</filename>.
+ instance <filename>/dev/scd0</filename> or a symlink
+ like <filename>/dev/cdrw</filename>.
</para>
<para>
In some cases, this device name is used to directly write
@@ -2300,6 +2300,12 @@
consistency check, if enabled.
</para>
<para>
+ Note: some users have reported intermittent problems when
+ using a symlink as the target device on Linux, especially
+ with DVD media. If you experience problems, try using the
+ real device name rather than the symlink.
+ </para>
+ <para>
<emphasis>Restrictions:</emphasis> Must be an absolute path.
</para>
</listitem>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-05-22 17:01:18
|
Revision: 974
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=974&view=rev
Author: pronovic
Date: 2010-05-22 17:01:12 +0000 (Sat, 22 May 2010)
Log Message:
-----------
Tagging the 2.19.6 release of Cedar Backup.
Added Paths:
-----------
cedar-backup2/tags/CEDAR_BACKUP2_V2.19.6/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-05-22 17:01:03
|
Revision: 973
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=973&view=rev
Author: pronovic
Date: 2010-05-22 17:00:56 +0000 (Sat, 22 May 2010)
Log Message:
-----------
Release 2.19.6
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 2010-05-22 16:51:20 UTC (rev 972)
+++ cedar-backup2/trunk/CedarBackup2/release.py 2010-05-22 17:00:56 UTC (rev 973)
@@ -34,7 +34,7 @@
AUTHOR = "Kenneth J. Pronovici"
EMAIL = "pro...@ie..."
COPYRIGHT = "2004-2010"
-VERSION = "2.19.5"
-DATE = "10 Jan 2010"
+VERSION = "2.19.6"
+DATE = "22 May 2010"
URL = "http://cedar-backup.sourceforge.net/"
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2010-05-22 16:51:20 UTC (rev 972)
+++ cedar-backup2/trunk/Changelog 2010-05-22 17:00:56 UTC (rev 973)
@@ -1,4 +1,4 @@
-Version 2.19.6 unreleased
+Version 2.19.6 22 May 2010
* Work around strange stderr file descriptor bugs discovered on Cygwin.
* Tweak expected results for tests that fail on Cygwin with Python 2.5.x.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-05-22 16:51:26
|
Revision: 972
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=972&view=rev
Author: pronovic
Date: 2010-05-22 16:51:20 +0000 (Sat, 22 May 2010)
Log Message:
-----------
Fix log message for delay (again, ugh)
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py
cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py
Modified: cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py 2010-05-22 16:44:01 UTC (rev 971)
+++ cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py 2010-05-22 16:51:20 UTC (rev 972)
@@ -862,7 +862,7 @@
self.openTray()
self.closeTray()
if self.refreshMediaDelay is not None:
- logger.debug("Per configuration, sleeping %d seconds to stabilize media state." % self.refreshDelay)
+ logger.debug("Per configuration, sleeping %d seconds to stabilize media state." % self.refreshMediaDelay)
time.sleep(self.refreshMediaDelay)
logger.debug("Sleep is complete; hopefully media state is stable now.")
Modified: cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py 2010-05-22 16:44:01 UTC (rev 971)
+++ cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py 2010-05-22 16:51:20 UTC (rev 972)
@@ -663,7 +663,7 @@
self.openTray()
self.closeTray()
if self.refreshMediaDelay is not None:
- logger.debug("Per configuration, sleeping %d seconds to stabilize media state." % self.refreshDelay)
+ logger.debug("Per configuration, sleeping %d seconds to stabilize media state." % self.refreshMediaDelay)
time.sleep(self.refreshMediaDelay)
logger.debug("Sleep is complete; hopefully media state is stable now.")
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-05-22 16:44:07
|
Revision: 971
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=971&view=rev
Author: pronovic
Date: 2010-05-22 16:44:01 +0000 (Sat, 22 May 2010)
Log Message:
-----------
Fix log message for delay
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py
cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py
Modified: cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py 2010-05-22 16:37:38 UTC (rev 970)
+++ cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py 2010-05-22 16:44:01 UTC (rev 971)
@@ -862,7 +862,7 @@
self.openTray()
self.closeTray()
if self.refreshMediaDelay is not None:
- logger.debug("Per configuration, sleeping %d seconds to stabilize media state.")
+ logger.debug("Per configuration, sleeping %d seconds to stabilize media state." % self.refreshDelay)
time.sleep(self.refreshMediaDelay)
logger.debug("Sleep is complete; hopefully media state is stable now.")
Modified: cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py 2010-05-22 16:37:38 UTC (rev 970)
+++ cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py 2010-05-22 16:44:01 UTC (rev 971)
@@ -663,7 +663,7 @@
self.openTray()
self.closeTray()
if self.refreshMediaDelay is not None:
- logger.debug("Per configuration, sleeping %d seconds to stabilize media state.")
+ logger.debug("Per configuration, sleeping %d seconds to stabilize media state." % self.refreshDelay)
time.sleep(self.refreshMediaDelay)
logger.debug("Sleep is complete; hopefully media state is stable now.")
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-05-22 16:37:46
|
Revision: 970
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=970&view=rev
Author: pronovic
Date: 2010-05-22 16:37:38 +0000 (Sat, 22 May 2010)
Log Message:
-----------
Add refresh_media_delay configuration option and related functionality.
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/actions/util.py
cedar-backup2/trunk/CedarBackup2/config.py
cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py
cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/manual/src/config.xml
cedar-backup2/trunk/test/configtests.py
cedar-backup2/trunk/test/data/cback.conf.12
Property Changed:
----------------
cedar-backup2/trunk/
Property changes on: cedar-backup2/trunk
___________________________________________________________________
Added: svn:ignore
+ tags
Modified: cedar-backup2/trunk/CedarBackup2/actions/util.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/actions/util.py 2010-05-22 16:25:56 UTC (rev 969)
+++ cedar-backup2/trunk/CedarBackup2/actions/util.py 2010-05-22 16:37:38 UTC (rev 970)
@@ -147,14 +147,15 @@
deviceScsiId = config.store.deviceScsiId
driveSpeed = config.store.driveSpeed
noEject = config.store.noEject
+ refreshMediaDelay = config.store.refreshMediaDelay
deviceType = _getDeviceType(config)
mediaType = _getMediaType(config)
if deviceMounted(devicePath):
raise IOError("Device [%s] is currently mounted." % (devicePath))
if deviceType == "cdwriter":
- return CdWriter(devicePath, deviceScsiId, driveSpeed, mediaType, noEject)
+ return CdWriter(devicePath, deviceScsiId, driveSpeed, mediaType, noEject, refreshMediaDelay)
elif deviceType == "dvdwriter":
- return DvdWriter(devicePath, deviceScsiId, driveSpeed, mediaType, noEject)
+ return DvdWriter(devicePath, deviceScsiId, driveSpeed, mediaType, noEject, refreshMediaDelay)
else:
raise ValueError("Device type [%s] is invalid." % deviceType)
Modified: cedar-backup2/trunk/CedarBackup2/config.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/config.py 2010-05-22 16:25:56 UTC (rev 969)
+++ cedar-backup2/trunk/CedarBackup2/config.py 2010-05-22 16:37:38 UTC (rev 970)
@@ -3490,6 +3490,7 @@
- The SCSI id, if provided, must be in the form specified by L{validateScsiId}.
- The drive speed must be an integer >= 1
- The blanking behavior must be a C{BlankBehavior} object
+ - The refresh media delay must be an integer >= 0
Note that although the blanking factor must be a positive floating point
number, it is stored as a string. This is done so that we can losslessly go
@@ -3497,13 +3498,14 @@
@sort: __init__, __repr__, __str__, __cmp__, sourceDir,
mediaType, deviceType, devicePath, deviceScsiId,
- driveSpeed, checkData, checkMedia, warnMidnite, noEject, blankBehavior
+ driveSpeed, checkData, checkMedia, warnMidnite, noEject,
+ blankBehavior, refreshMediaDelay
"""
def __init__(self, sourceDir=None, mediaType=None, deviceType=None,
devicePath=None, deviceScsiId=None, driveSpeed=None,
checkData=False, warnMidnite=False, noEject=False,
- checkMedia=False, blankBehavior=None):
+ checkMedia=False, blankBehavior=None, refreshMediaDelay=None):
"""
Constructor for the C{StoreConfig} class.
@@ -3518,6 +3520,7 @@
@param warnMidnite: Whether to generate warnings for crossing midnite.
@param noEject: Indicates that the writer device should not be ejected.
@param blankBehavior: Controls optimized blanking behavior.
+ @param refreshMediaDelay: Delay, in seconds, to add after refreshing media
@raise ValueError: If one of the values is invalid.
"""
@@ -3532,6 +3535,7 @@
self._warnMidnite = None
self._noEject = None
self._blankBehavior = None
+ self._refreshMediaDelay = None
self.sourceDir = sourceDir
self.mediaType = mediaType
self.deviceType = deviceType
@@ -3543,15 +3547,16 @@
self.warnMidnite = warnMidnite
self.noEject = noEject
self.blankBehavior = blankBehavior
+ self.refreshMediaDelay = refreshMediaDelay
def __repr__(self):
"""
Official string representation for class instance.
"""
- return "StoreConfig(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" % (self.sourceDir, self.mediaType, self.deviceType,
- self.devicePath, self.deviceScsiId, self.driveSpeed,
- self.checkData, self.warnMidnite, self.noEject,
- self.checkMedia, self.blankBehavior)
+ return "StoreConfig(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" % (self.sourceDir, self.mediaType, self.deviceType,
+ self.devicePath, self.deviceScsiId, self.driveSpeed,
+ self.checkData, self.warnMidnite, self.noEject,
+ self.checkMedia, self.blankBehavior, self.refreshMediaDelay)
def __str__(self):
"""
@@ -3622,6 +3627,11 @@
return -1
else:
return 1
+ if self._refreshMediaDelay != other._refreshMediaDelay:
+ if self._refreshMediaDelay < other._refreshMediaDelay:
+ return -1
+ else:
+ return 1
return 0
def _setSourceDir(self, value):
@@ -3810,6 +3820,31 @@
"""
return self._blankBehavior
+ def _setRefreshMediaDelay(self, value):
+ """
+ Property target used to set the refreshMediaDelay.
+ The value must be an integer >= 0.
+ @raise ValueError: If the value is not valid.
+ """
+ if value is None:
+ self._refreshMediaDelay = None
+ else:
+ try:
+ value = int(value)
+ except TypeError:
+ raise ValueError("Action refreshMediaDelay value must be an integer >= 0.")
+ if value < 0:
+ raise ValueError("Action refreshMediaDelay value must be an integer >= 0.")
+ if value == 0:
+ value = None # normalize this out, since it's the default
+ self._refreshMediaDelay = value
+
+ def _getRefreshMediaDelay(self):
+ """
+ Property target used to get the action refreshMediaDelay.
+ """
+ return self._refreshMediaDelay
+
sourceDir = property(_getSourceDir, _setSourceDir, None, "Directory whose contents should be written to media.")
mediaType = property(_getMediaType, _setMediaType, None, "Type of the media (see notes above).")
deviceType = property(_getDeviceType, _setDeviceType, None, "Type of the device (optional, see notes above).")
@@ -3821,6 +3856,7 @@
warnMidnite = property(_getWarnMidnite, _setWarnMidnite, None, "Whether to generate warnings for crossing midnite.")
noEject = property(_getNoEject, _setNoEject, None, "Indicates that the writer device should not be ejected.")
blankBehavior = property(_getBlankBehavior, _setBlankBehavior, None, "Controls optimized blanking behavior.")
+ refreshMediaDelay = property(_getRefreshMediaDelay, _setRefreshMediaDelay, None, "Delay, in seconds, to add after refreshing media.")
########################################################################
@@ -4635,6 +4671,7 @@
store.warnMidnite = readBoolean(sectionNode, "warn_midnite")
store.noEject = readBoolean(sectionNode, "no_eject")
store.blankBehavior = Config._parseBlankBehavior(sectionNode)
+ store.refreshMediaDelay = readInteger(sectionNode, "refresh_media_delay")
return store
_parseStore = staticmethod(_parseStore)
@@ -5325,6 +5362,7 @@
addBooleanNode(xmlDom, sectionNode, "check_media", storeConfig.checkMedia)
addBooleanNode(xmlDom, sectionNode, "warn_midnite", storeConfig.warnMidnite)
addBooleanNode(xmlDom, sectionNode, "no_eject", storeConfig.noEject)
+ addIntegerNode(xmlDom, sectionNode, "refresh_media_delay", storeConfig.refreshMediaDelay)
Config._addBlankBehavior(xmlDom, sectionNode, storeConfig.blankBehavior)
_addStore = staticmethod(_addStore)
Modified: cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py 2010-05-22 16:25:56 UTC (rev 969)
+++ cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py 2010-05-22 16:37:38 UTC (rev 970)
@@ -413,7 +413,8 @@
##############
def __init__(self, device, scsiId=None, driveSpeed=None,
- mediaType=MEDIA_CDRW_74, noEject=False, unittest=False):
+ mediaType=MEDIA_CDRW_74, noEject=False,
+ refreshMediaDelay=0, unittest=False):
"""
Initializes a CD writer object.
@@ -454,6 +455,9 @@
@param noEject: Overrides properties to indicate that the device does not support eject.
@type noEject: Boolean true/false
+ @param refreshMediaDelay: Refresh media delay to use, if any
+ @type refreshMediaDelay: Number of seconds, an integer >= 0
+
@param unittest: Turns off certain validations, for use in unit testing.
@type unittest: Boolean true/false
@@ -468,6 +472,7 @@
self._driveSpeed = validateDriveSpeed(driveSpeed)
self._media = MediaDefinition(mediaType)
self._noEject = noEject
+ self._refreshMediaDelay = refreshMediaDelay
if not unittest:
(self._deviceType,
self._deviceVendor,
@@ -556,6 +561,12 @@
"""
return self._deviceCanEject
+ def _getRefreshMediaDelay(self):
+ """
+ Property target used to get the configured refresh media delay, in seconds.
+ """
+ return self._refreshMediaDelay
+
device = property(_getDevice, None, None, doc="Filesystem device name for this writer.")
scsiId = property(_getScsiId, None, None, doc="SCSI id for the device, in the form C{[<method>:]scsibus,target,lun}.")
hardwareId = property(_getHardwareId, None, None, doc="Hardware id for this writer, either SCSI id or device path.");
@@ -568,6 +579,7 @@
deviceSupportsMulti = property(_getDeviceSupportsMulti, None, None, doc="Indicates whether device supports multisession discs.")
deviceHasTray = property(_getDeviceHasTray, None, None, doc="Indicates whether the device has a media tray.")
deviceCanEject = property(_getDeviceCanEject, None, None, doc="Indicates whether the device supports ejecting its media.")
+ refreshMediaDelay = property(_getRefreshMediaDelay, None, None, doc="Refresh media delay, in seconds.")
#################################################
@@ -835,18 +847,24 @@
Sometimes, a device gets confused about the state of its media. Often,
all it takes to solve the problem is to eject the media and then
- immediately reload it.
+ immediately reload it. (There is also a configurable refresh media delay
+ which can be applied after the tray is closed, for situations where this
+ makes a difference.)
This only works if the device has a tray and supports ejecting its media.
We have no way to know if the tray is currently open or closed, so we
just send the appropriate command and hope for the best. If the device
does not have a tray or does not support ejecting its media, then we do
- nothing.
+ nothing. The configured delay still applies, though.
@raise IOError: If there is an error talking to the device.
"""
self.openTray()
self.closeTray()
+ if self.refreshMediaDelay is not None:
+ logger.debug("Per configuration, sleeping %d seconds to stabilize media state.")
+ time.sleep(self.refreshMediaDelay)
+ logger.debug("Sleep is complete; hopefully media state is stable now.")
def writeImage(self, imagePath=None, newDisc=False, writeMulti=True):
"""
Modified: cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py 2010-05-22 16:25:56 UTC (rev 969)
+++ cedar-backup2/trunk/CedarBackup2/writers/dvdwriter.py 2010-05-22 16:37:38 UTC (rev 970)
@@ -57,6 +57,7 @@
import re
import logging
import tempfile
+import time
# Cedar Backup modules
from CedarBackup2.filesystem import BackupFileList
@@ -361,7 +362,8 @@
##############
def __init__(self, device, scsiId=None, driveSpeed=None,
- mediaType=MEDIA_DVDPLUSRW, noEject=False, unittest=False):
+ mediaType=MEDIA_DVDPLUSRW, noEject=False,
+ refreshMediaDelay=0, unittest=False):
"""
Initializes a DVD writer object.
@@ -394,6 +396,9 @@
@param noEject: Tells Cedar Backup that the device cannot safely be ejected
@type noEject: Boolean true/false
+ @param refreshMediaDelay: Refresh media delay to use, if any
+ @type refreshMediaDelay: Number of seconds, an integer >= 0
+
@param unittest: Turns off certain validations, for use in unit testing.
@type unittest: Boolean true/false
@@ -408,6 +413,7 @@
self._scsiId = scsiId # not validated, because it's just for reference
self._driveSpeed = validateDriveSpeed(driveSpeed)
self._media = MediaDefinition(mediaType)
+ self._refreshMediaDelay = refreshMediaDelay
if noEject:
self._deviceHasTray = False
self._deviceCanEject = False
@@ -462,6 +468,12 @@
"""
return self._deviceCanEject
+ def _getRefreshMediaDelay(self):
+ """
+ Property target used to get the configured refresh media delay, in seconds.
+ """
+ return self._refreshMediaDelay
+
device = property(_getDevice, None, None, doc="Filesystem device name for this writer.")
scsiId = property(_getScsiId, None, None, doc="SCSI id for the device (saved for reference only).")
hardwareId = property(_getHardwareId, None, None, doc="Hardware id for this writer (always the device path).");
@@ -469,6 +481,7 @@
media = property(_getMedia, None, None, doc="Definition of media that is expected to be in the device.")
deviceHasTray = property(_getDeviceHasTray, None, None, doc="Indicates whether the device has a media tray.")
deviceCanEject = property(_getDeviceCanEject, None, None, doc="Indicates whether the device supports ejecting its media.")
+ refreshMediaDelay = property(_getRefreshMediaDelay, None, None, doc="Refresh media delay, in seconds.")
#################################################
@@ -635,18 +648,24 @@
Sometimes, a device gets confused about the state of its media. Often,
all it takes to solve the problem is to eject the media and then
- immediately reload it.
+ immediately reload it. (There is also a configurable refresh media delay
+ which can be applied after the tray is closed, for situations where this
+ makes a difference.)
This only works if the device has a tray and supports ejecting its media.
We have no way to know if the tray is currently open or closed, so we
just send the appropriate command and hope for the best. If the device
does not have a tray or does not support ejecting its media, then we do
- nothing.
+ nothing. The configured delay still applies, though.
@raise IOError: If there is an error talking to the device.
"""
self.openTray()
self.closeTray()
+ if self.refreshMediaDelay is not None:
+ logger.debug("Per configuration, sleeping %d seconds to stabilize media state.")
+ time.sleep(self.refreshMediaDelay)
+ logger.debug("Sleep is complete; hopefully media state is stable now.")
def writeImage(self, imagePath=None, newDisc=False, writeMulti=True):
"""
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2010-05-22 16:25:56 UTC (rev 969)
+++ cedar-backup2/trunk/Changelog 2010-05-22 16:37:38 UTC (rev 970)
@@ -3,6 +3,7 @@
* Work around strange stderr file descriptor bugs discovered on Cygwin.
* Tweak expected results for tests that fail on Cygwin with Python 2.5.x.
* Set up command overrides properly so full test suite works on Debian.
+ * Add refresh_media_delay configuration option and related functionality.
Version 2.19.5 10 Jan 2010
Modified: cedar-backup2/trunk/manual/src/config.xml
===================================================================
--- cedar-backup2/trunk/manual/src/config.xml 2010-05-22 16:25:56 UTC (rev 969)
+++ cedar-backup2/trunk/manual/src/config.xml 2010-05-22 16:37:38 UTC (rev 970)
@@ -2198,6 +2198,7 @@
<check_media>Y</check_media>
<warn_midnite>Y</warn_midnite>
<no_eject>N</no_eject>
+ <refresh_media_delay>5</refresh_media_delay>
<blank_behavior>
<mode>weekly</mode>
<factor>1.3</factor>
@@ -2497,6 +2498,27 @@
</varlistentry>
<varlistentry>
+ <term><literal>refresh_media_delay</literal></term>
+ <listitem>
+ <para>Number of seconds to delay after refreshing media</para>
+ <para>
+ This field is optional. If it doesn't exist, no delay
+ will occur.
+ </para>
+ <para>
+ Some devices seem to take a little while to stablize after
+ refreshing the media (i.e. closing and opening the tray).
+ During this period, operations on the media may fail. If
+ your device behaves like this, you can try setting a delay
+ of a few seconds to remedy the problem.
+ </para>
+ <para>
+ <emphasis>Restrictions:</emphasis> If set, must be an integer ≥ 1.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><literal>blank_behavior</literal></term>
<listitem>
<para>Optimized blanking strategy.</para>
Modified: cedar-backup2/trunk/test/configtests.py
===================================================================
--- cedar-backup2/trunk/test/configtests.py 2010-05-22 16:25:56 UTC (rev 969)
+++ cedar-backup2/trunk/test/configtests.py 2010-05-22 16:37:38 UTC (rev 970)
@@ -7794,13 +7794,14 @@
self.failUnlessEqual(False, store.warnMidnite)
self.failUnlessEqual(False, store.noEject)
self.failUnlessEqual(None, store.blankBehavior)
+ self.failUnlessEqual(None, store.refreshMediaDelay)
def testConstructor_002(self):
"""
Test constructor with all values filled in, with valid values.
"""
behavior = BlankBehavior("weekly", "1.3")
- store = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior)
+ store = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior, 12)
self.failUnlessEqual("/source", store.sourceDir)
self.failUnlessEqual("cdr-74", store.mediaType)
self.failUnlessEqual("cdwriter", store.deviceType)
@@ -7812,6 +7813,7 @@
self.failUnlessEqual(True, store.warnMidnite)
self.failUnlessEqual(True, store.noEject)
self.failUnlessEqual(behavior, store.blankBehavior)
+ self.failUnlessEqual(12, store.refreshMediaDelay)
def testConstructor_003(self):
"""
@@ -8213,7 +8215,43 @@
store = StoreConfig()
self.failUnlessAssignRaises(ValueError, store, "blankBehavior", CollectDir())
+ def testConstructor_041(self):
+ """
+ Test assignment of refreshMediaDelay attribute, None value.
+ """
+ store = StoreConfig(refreshMediaDelay=4)
+ self.failUnlessEqual(4, store.refreshMediaDelay)
+ store.refreshMediaDelay = None
+ self.failUnlessEqual(None, store.refreshMediaDelay)
+ def testConstructor_042(self):
+ """
+ Test assignment of refreshMediaDelay attribute, valid value.
+ """
+ store = StoreConfig()
+ self.failUnlessEqual(None, store.refreshMediaDelay)
+ store.refreshMediaDelay = 4
+ self.failUnlessEqual(4, store.refreshMediaDelay)
+ store.refreshMediaDelay = "12"
+ self.failUnlessEqual(12, store.refreshMediaDelay)
+ store.refreshMediaDelay = "0"
+ self.failUnlessEqual(None, store.refreshMediaDelay)
+ store.refreshMediaDelay = 0
+ self.failUnlessEqual(None, store.refreshMediaDelay)
+
+ def testConstructor_043(self):
+ """
+ Test assignment of refreshMediaDelay attribute, invalid value (not an integer).
+ """
+ store = StoreConfig()
+ self.failUnlessEqual(None, store.refreshMediaDelay)
+ self.failUnlessAssignRaises(ValueError, store, "refreshMediaDelay", "blech")
+ self.failUnlessEqual(None, store.refreshMediaDelay)
+ self.failUnlessAssignRaises(ValueError, store, "refreshMediaDelay", CollectDir())
+ self.failUnlessEqual(None, store.refreshMediaDelay)
+
+
+
############################
# Test comparison operators
############################
@@ -8238,8 +8276,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failUnlessEqual(store1, store2)
self.failUnless(store1 == store2)
self.failUnless(not store1 < store2)
@@ -8268,8 +8306,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source1", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1)
- store2 = StoreConfig("/source2", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source1", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1, 4)
+ store2 = StoreConfig("/source2", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8298,8 +8336,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdrw-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdrw-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(not store1 < store2)
@@ -8342,8 +8380,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/hdd", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/hdd", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8372,8 +8410,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "ATA:0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "ATA:0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8402,8 +8440,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 1, True, True, True, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 1, True, True, True, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8418,8 +8456,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, False, True, True, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, False, True, True, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8434,8 +8472,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, False, True, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, False, True, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8450,8 +8488,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, False, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, False, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8466,8 +8504,8 @@
"""
behavior1 = BlankBehavior("weekly", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, False, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, False, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8497,8 +8535,8 @@
"""
behavior1 = BlankBehavior("daily", "1.3")
behavior2 = BlankBehavior("weekly", "1.3")
- store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1)
- store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2)
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior1, 4)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 4, True, True, True, True, behavior2, 4)
self.failIfEqual(store1, store2)
self.failUnless(not store1 == store2)
self.failUnless(store1 < store2)
@@ -8507,7 +8545,37 @@
self.failUnless(not store1 >= store2)
self.failUnless(store1 != store2)
+ def testComparison_020(self):
+ """
+ Test comparison of two differing objects, refreshMediaDelay differs (one None).
+ """
+ store1 = StoreConfig()
+ store2 = StoreConfig(refreshMediaDelay=3)
+ self.failIfEqual(store1, store2)
+ self.failUnless(not store1 == store2)
+ self.failUnless(store1 < store2)
+ self.failUnless(store1 <= store2)
+ self.failUnless(not store1 > store2)
+ self.failUnless(not store1 >= store2)
+ self.failUnless(store1 != store2)
+ def testComparison_021(self):
+ """
+ Test comparison of two differing objects, refreshMediaDelay differs.
+ """
+ behavior1 = BlankBehavior("weekly", "1.3")
+ behavior2 = BlankBehavior("weekly", "1.3")
+ store1 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 1, True, True, True, True, behavior1, 1)
+ store2 = StoreConfig("/source", "cdr-74", "cdwriter", "/dev/cdrw", "0,0,0", 1, True, True, True, True, behavior2, 4)
+ self.failIfEqual(store1, store2)
+ self.failUnless(not store1 == store2)
+ self.failUnless(store1 < store2)
+ self.failUnless(store1 <= store2)
+ self.failUnless(not store1 > store2)
+ self.failUnless(not store1 >= store2)
+ self.failUnless(store1 != store2)
+
+
########################
# TestPurgeConfig class
########################
@@ -11352,6 +11420,7 @@
expected.store.checkMedia = True
expected.store.warnMidnite = True
expected.store.noEject = True
+ expected.store.refreshMediaDelay = 12
expected.store.blankBehavior = BlankBehavior()
expected.store.blankBehavior.blankMode = "weekly"
expected.store.blankBehavior.blankFactor = "1.3"
@@ -12340,6 +12409,7 @@
before.store.checkMedia = True
before.store.warnMidnite = True
before.store.noEject = True
+ before.store.refreshMediaDelay = 12
self.failUnlessRaises(ValueError, before.extractXml, validate=True)
def testExtractXml_028(self):
@@ -12357,6 +12427,7 @@
before.store.checkMedia = True
before.store.warnMidnite = True
before.store.noEject = True
+ before.store.refreshMediaDelay = 12
beforeXml = before.extractXml(validate=False)
after = Config(xmlData=beforeXml, validate=False)
self.failUnlessEqual(before, after)
Modified: cedar-backup2/trunk/test/data/cback.conf.12
===================================================================
--- cedar-backup2/trunk/test/data/cback.conf.12 2010-05-22 16:25:56 UTC (rev 969)
+++ cedar-backup2/trunk/test/data/cback.conf.12 2010-05-22 16:37:38 UTC (rev 970)
@@ -12,6 +12,7 @@
<check_media>Y</check_media>
<warn_midnite>Y</warn_midnite>
<no_eject>Y</no_eject>
+ <refresh_media_delay>12</refresh_media_delay>
<blank_behavior>
<mode>weekly</mode>
<factor>1.3</factor>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-05-22 16:26:02
|
Revision: 969
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=969&view=rev
Author: pronovic
Date: 2010-05-22 16:25:56 +0000 (Sat, 22 May 2010)
Log Message:
-----------
Set up command overrides properly so full test suite works on Debian
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/testutil.py
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/util/test.py
Modified: cedar-backup2/trunk/CedarBackup2/testutil.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/testutil.py 2010-05-22 16:14:52 UTC (rev 968)
+++ cedar-backup2/trunk/CedarBackup2/testutil.py 2010-05-22 16:25:56 UTC (rev 969)
@@ -52,8 +52,8 @@
@sort: findResources, commandAvailable,
buildPath, removedir, extractTar, changeFileAge,
getMaskAsMode, getLogin, failUnlessAssignRaises, runningAsRoot,
- platformMacOsX, platformWindows, platformHasEcho,
- platformSupportsLinks, platformSupportsPermissions,
+ platformDebian, platformMacOsX, platformCygwin, platformWindows,
+ platformHasEcho, platformSupportsLinks, platformSupportsPermissions,
platformRequiresBinaryRead
@author: Kenneth J. Pronovici <pro...@ie...>
@@ -76,6 +76,9 @@
from StringIO import StringIO
from CedarBackup2.util import encodePath, executeCommand
+from CedarBackup2.config import Config, OptionsConfig
+from CedarBackup2.customize import customizeOverrides
+from CedarBackup2.cli import setupPathResolver
########################################################################
@@ -105,6 +108,33 @@
logger.addHandler(handler)
+#################
+# setupOverrides
+#################
+
+def setupOverrides():
+ """
+ Set up any platform-specific overrides that might be required.
+
+ When packages are built, this is done manually (hardcoded) in customize.py
+ and the overrides are set up in cli.cli(). This way, no runtime checks need
+ to be done. This is safe, because the package maintainer knows exactly
+ which platform (Debian or not) the package is being built for.
+
+ Unit tests are different, because they might be run anywhere. So, we
+ attempt to make a guess about plaform using platformDebian(), and use that
+ to set up the custom overrides so that platform-specific unit tests continue
+ to work.
+ """
+ config = Config()
+ config.options = OptionsConfig()
+ if platformDebian():
+ customizeOverrides(config, platform="debian")
+ else:
+ customizeOverrides(config, platform="standard")
+ setupPathResolver(config)
+
+
###########################
# findResources() function
###########################
@@ -387,6 +417,8 @@
return platform.platform(True, True).startswith("Windows")
elif name == "macosx":
return sys.platform == "darwin"
+ elif name == "debian":
+ return platform.platform(False, False).find("debian") > 0
elif name == "cygwin":
return platform.platform(True, True).startswith("CYGWIN")
else:
@@ -394,6 +426,17 @@
############################
+# platformDebian() function
+############################
+
+def platformDebian():
+ """
+ Returns boolean indicating whether this is the Debian platform.
+ """
+ return _isPlatform("debian")
+
+
+############################
# platformMacOsX() function
############################
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2010-05-22 16:14:52 UTC (rev 968)
+++ cedar-backup2/trunk/Changelog 2010-05-22 16:25:56 UTC (rev 969)
@@ -2,6 +2,7 @@
* Work around strange stderr file descriptor bugs discovered on Cygwin.
* Tweak expected results for tests that fail on Cygwin with Python 2.5.x.
+ * Set up command overrides properly so full test suite works on Debian.
Version 2.19.5 10 Jan 2010
Modified: cedar-backup2/trunk/util/test.py
===================================================================
--- cedar-backup2/trunk/util/test.py 2010-05-22 16:14:52 UTC (rev 968)
+++ cedar-backup2/trunk/util/test.py 2010-05-22 16:25:56 UTC (rev 969)
@@ -134,6 +134,10 @@
print "tree, or properly set the PYTHONPATH enviroment variable."
return 1
+ # Setup platform-specific command overrides
+ from CedarBackup2.testutil import setupOverrides
+ setupOverrides()
+
# Import the unit test modules
try:
if os.path.exists(os.path.join(".", "test", "filesystemtests.py")):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-05-22 16:15:02
|
Revision: 968
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=968&view=rev
Author: pronovic
Date: 2010-05-22 16:14:52 +0000 (Sat, 22 May 2010)
Log Message:
-----------
Add tags
Modified Paths:
--------------
cedar-backup2/trunk/Makefile
Modified: cedar-backup2/trunk/Makefile
===================================================================
--- cedar-backup2/trunk/Makefile 2010-02-23 22:47:22 UTC (rev 967)
+++ cedar-backup2/trunk/Makefile 2010-05-22 16:14:52 UTC (rev 968)
@@ -69,6 +69,9 @@
-@$(FIND) . -name "*.pyc" | xargs rm -f
-@rm -f PKG-INFO
+tags:
+ ctags `find . -name "*.py"`
+
# This uses the "full" argument to get all tests
test:
@$(SUDO) -v
@@ -204,5 +207,5 @@
# Phony rules for use by GNU make
##################################
-.PHONY: all clean test usertest check allcheck doc docs docclean docsclean epydoc interface interface-doc interface-html book validate manual manual-doc distrib distribclean sdist sdistclean debdist debdistclean docdist
+.PHONY: all clean tags test usertest check allcheck doc docs docclean docsclean epydoc interface interface-doc interface-html book validate manual manual-doc distrib distribclean sdist sdistclean debdist debdistclean docdist
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-02-23 22:47:28
|
Revision: 967
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=967&view=rev
Author: pronovic
Date: 2010-02-23 22:47:22 +0000 (Tue, 23 Feb 2010)
Log Message:
-----------
Tweak expected results for tests that fail on Cygwin with Python 2.5.x.
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/testutil.py
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/test/filesystemtests.py
cedar-backup2/trunk/test/peertests.py
cedar-backup2/trunk/test/utiltests.py
Modified: cedar-backup2/trunk/CedarBackup2/testutil.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/testutil.py 2010-02-23 22:29:55 UTC (rev 966)
+++ cedar-backup2/trunk/CedarBackup2/testutil.py 2010-02-23 22:47:22 UTC (rev 967)
@@ -387,6 +387,8 @@
return platform.platform(True, True).startswith("Windows")
elif name == "macosx":
return sys.platform == "darwin"
+ elif name == "cygwin":
+ return platform.platform(True, True).startswith("CYGWIN")
else:
raise ValueError("Unknown platform [%s]." % name)
@@ -413,6 +415,17 @@
return _isPlatform("windows")
+############################
+# platformCygwin() function
+############################
+
+def platformCygwin():
+ """
+ Returns boolean indicating whether this is the Cygwin platform.
+ """
+ return _isPlatform("cygwin")
+
+
###################################
# platformSupportsLinks() function
###################################
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2010-02-23 22:29:55 UTC (rev 966)
+++ cedar-backup2/trunk/Changelog 2010-02-23 22:47:22 UTC (rev 967)
@@ -1,6 +1,7 @@
Version 2.19.6 unreleased
* Work around strange stderr file descriptor bugs discovered on Cygwin.
+ * Tweak expected results for tests that fail on Cygwin with Python 2.5.x.
Version 2.19.5 10 Jan 2010
Modified: cedar-backup2/trunk/test/filesystemtests.py
===================================================================
--- cedar-backup2/trunk/test/filesystemtests.py 2010-02-23 22:29:55 UTC (rev 966)
+++ cedar-backup2/trunk/test/filesystemtests.py 2010-02-23 22:47:22 UTC (rev 967)
@@ -118,7 +118,8 @@
import tarfile
from CedarBackup2.testutil import findResources, buildPath, removedir, extractTar, changeFileAge, randomFilename
-from CedarBackup2.testutil import platformMacOsX, platformWindows, platformSupportsLinks, platformRequiresBinaryRead
+from CedarBackup2.testutil import platformMacOsX, platformWindows, platformCygwin
+from CedarBackup2.testutil import platformSupportsLinks, platformRequiresBinaryRead
from CedarBackup2.testutil import failUnlessAssignRaises
from CedarBackup2.filesystem import FilesystemList, BackupFileList, PurgeItemList, normalizeDir, compareContents
@@ -17902,7 +17903,10 @@
self.failUnless(self.buildPath([ "tree9", "file002", ]) in backupList)
self.failUnless(self.buildPath([ "tree9", "link001", ]) in backupList)
self.failUnless(self.buildPath([ "tree9", "link002", ]) in backupList)
- tarPath = self.buildRandomPath(260, ".tar")
+ if platformCygwin():
+ tarPath = self.buildRandomPath(255, ".tar") # Cygwin inherits the Windows 255-char limit
+ else:
+ tarPath = self.buildRandomPath(260, ".tar")
backupList.generateTarfile(tarPath, mode="tar")
self.failUnless(tarfile.is_tarfile(tarPath))
tarFile = tarfile.open(tarPath)
@@ -17981,7 +17985,10 @@
self.failUnless(self.buildPath([ "tree9", "file002", ]) in backupList)
self.failUnless(self.buildPath([ "tree9", "link001", ]) in backupList)
self.failUnless(self.buildPath([ "tree9", "link002", ]) in backupList)
- tarPath = self.buildRandomPath(260, ".tar.gz")
+ if platformCygwin():
+ tarPath = self.buildRandomPath(255, ".tar") # Cygwin inherits the Windows 255-char limit
+ else:
+ tarPath = self.buildRandomPath(260, ".tar")
backupList.generateTarfile(tarPath, mode="targz")
self.failUnless(tarfile.is_tarfile(tarPath))
tarFile = tarfile.open(tarPath)
@@ -18060,7 +18067,10 @@
self.failUnless(self.buildPath([ "tree9", "file002", ]) in backupList)
self.failUnless(self.buildPath([ "tree9", "link001", ]) in backupList)
self.failUnless(self.buildPath([ "tree9", "link002", ]) in backupList)
- tarPath = self.buildRandomPath(260, ".tar.bz2")
+ if platformCygwin():
+ tarPath = self.buildRandomPath(255, ".tar") # Cygwin inherits the Windows 255-char limit
+ else:
+ tarPath = self.buildRandomPath(260, ".tar")
backupList.generateTarfile(tarPath, mode="tarbz2")
self.failUnless(tarfile.is_tarfile(tarPath))
tarFile = tarfile.open(tarPath)
Modified: cedar-backup2/trunk/test/peertests.py
===================================================================
--- cedar-backup2/trunk/test/peertests.py 2010-02-23 22:29:55 UTC (rev 966)
+++ cedar-backup2/trunk/test/peertests.py 2010-02-23 22:47:22 UTC (rev 967)
@@ -100,7 +100,7 @@
import getpass
from CedarBackup2.testutil import findResources, buildPath, removedir, extractTar
from CedarBackup2.testutil import getMaskAsMode, getLogin, runningAsRoot, failUnlessAssignRaises
-from CedarBackup2.testutil import platformSupportsPermissions, platformWindows
+from CedarBackup2.testutil import platformSupportsPermissions, platformWindows, platformCygwin
from CedarBackup2.peer import LocalPeer, RemotePeer
from CedarBackup2.peer import DEF_RCP_COMMAND, DEF_RSH_COMMAND
from CedarBackup2.peer import DEF_COLLECT_INDICATOR, DEF_STAGE_INDICATOR
@@ -345,7 +345,7 @@
with spaces in the collect directory path and collect indicator file name.
"""
name = "peer1"
- if platformWindows():
+ if platformWindows() or platformCygwin():
# os.listdir has problems with trailing spaces
collectDir = self.buildPath([" collect dir", ])
collectIndicator = self.buildPath([" collect dir", "different, file", ])
Modified: cedar-backup2/trunk/test/utiltests.py
===================================================================
--- cedar-backup2/trunk/test/utiltests.py 2010-02-23 22:29:55 UTC (rev 966)
+++ cedar-backup2/trunk/test/utiltests.py 2010-02-23 22:47:22 UTC (rev 967)
@@ -83,7 +83,7 @@
from os.path import isdir
from CedarBackup2.testutil import findResources, removedir, extractTar, buildPath, captureOutput
-from CedarBackup2.testutil import platformHasEcho, platformWindows, platformSupportsLinks
+from CedarBackup2.testutil import platformHasEcho, platformWindows, platformCygwin, platformSupportsLinks
from CedarBackup2.util import UnorderedList, AbsolutePathList, ObjectTypeList
from CedarBackup2.util import RestrictedContentList, RegexMatchList, RegexList
from CedarBackup2.util import DirectedGraph, PathResolverSingleton, Diagnostics
@@ -3370,7 +3370,7 @@
seems to result in the exact same file on disk, so the test is valid.
"""
encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
- if encoding != 'mbcs' and encoding.find("ANSI") != 0: # test can't work on some filesystems
+ if not platformCygwin() and encoding != 'mbcs' and encoding.find("ANSI") != 0: # test can't work on some filesystems
path = u"\xe2\x99\xaa\xe2\x99\xac"
safePath = encodePath(path)
self.failUnless(isinstance(safePath, str))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-02-23 22:30:01
|
Revision: 966
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=966&view=rev
Author: pronovic
Date: 2010-02-23 22:29:55 +0000 (Tue, 23 Feb 2010)
Log Message:
-----------
Work around strange stderr file descriptor bugs discovered on Cygwin.
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/util.py
cedar-backup2/trunk/Changelog
Modified: cedar-backup2/trunk/CedarBackup2/util.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/util.py 2010-01-10 23:59:25 UTC (rev 965)
+++ cedar-backup2/trunk/CedarBackup2/util.py 2010-02-23 22:29:55 UTC (rev 966)
@@ -1535,7 +1535,13 @@
fields.extend(args)
try:
sanitizeEnvironment() # make sure we have a consistent environment
- pipe = Pipe(fields, ignoreStderr=ignoreStderr)
+ try:
+ pipe = Pipe(fields, ignoreStderr=ignoreStderr)
+ except OSError:
+ # On some platforms (i.e. Cygwin) this intermittently fails the first time we do it.
+ # So, we attempt it a second time and if that works, we just go on as usual.
+ # The problem appears to be that we sometimes get a bad stderr file descriptor.
+ pipe = Pipe(fields, ignoreStderr=ignoreStderr)
while True:
line = pipe.fromchild.readline()
if not line: break
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2010-01-10 23:59:25 UTC (rev 965)
+++ cedar-backup2/trunk/Changelog 2010-02-23 22:29:55 UTC (rev 966)
@@ -1,3 +1,7 @@
+Version 2.19.6 unreleased
+
+ * Work around strange stderr file descriptor bugs discovered on Cygwin.
+
Version 2.19.5 10 Jan 2010
* Add customization support, so Debian can use wodim and genisoimage.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 23:59:31
|
Revision: 965
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=965&view=rev
Author: pronovic
Date: 2010-01-10 23:59:25 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Tagging the 2.19.5 release of Cedar Backup.
Added Paths:
-----------
cedar-backup2/tags/CEDAR_BACKUP2_V2.19.5/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 23:58:00
|
Revision: 964
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=964&view=rev
Author: pronovic
Date: 2010-01-10 23:57:54 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Tagging new version of 2.19.5 release of Cedar Backup.
Removed Paths:
-------------
cedar-backup2/tags/CEDAR_BACKUP2_V2.19.5/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 23:57:22
|
Revision: 963
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=963&view=rev
Author: pronovic
Date: 2010-01-10 23:57:16 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Properly handle config.options.overrides=None
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/config.py
cedar-backup2/trunk/test/configtests.py
cedar-backup2/trunk/test/customizetests.py
Modified: cedar-backup2/trunk/CedarBackup2/config.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/config.py 2010-01-10 23:24:37 UTC (rev 962)
+++ cedar-backup2/trunk/CedarBackup2/config.py 2010-01-10 23:57:16 UTC (rev 963)
@@ -2628,13 +2628,17 @@
@param command: Name of command to be overridden.
@param absolutePath: Absolute path of the overrridden command.
"""
- exists = False
- for object in self.overrides:
- if object.command == command:
- exists = True
- break
- if not exists:
- self.overrides.append(CommandOverride(command, absolutePath))
+ override = CommandOverride(command, absolutePath)
+ if self.overrides is None:
+ self.overrides = [ override, ]
+ else:
+ exists = False
+ for object in self.overrides:
+ if object.command == override.command:
+ exists = True
+ break
+ if not exists:
+ self.overrides.append(override)
def replaceOverride(self, command, absolutePath):
"""
@@ -2642,14 +2646,18 @@
@param command: Name of command to be overridden.
@param absolutePath: Absolute path of the overrridden command.
"""
- exists = False
- for object in self.overrides:
- if object.command == command:
- exists = True
- object.absolutePath = absolutePath
- break
- if not exists:
- self.overrides.append(CommandOverride(command, absolutePath))
+ override = CommandOverride(command, absolutePath)
+ if self.overrides is None:
+ self.overrides = [ override, ]
+ else:
+ exists = False
+ for object in self.overrides:
+ if object.command == override.command:
+ exists = True
+ object.absolutePath = override.absolutePath
+ break
+ if not exists:
+ self.overrides.append(override)
def _setStartingDay(self, value):
"""
Modified: cedar-backup2/trunk/test/configtests.py
===================================================================
--- cedar-backup2/trunk/test/configtests.py 2010-01-10 23:24:37 UTC (rev 962)
+++ cedar-backup2/trunk/test/configtests.py 2010-01-10 23:57:16 UTC (rev 963)
@@ -6040,7 +6040,6 @@
Test addOverride() with no existing overrides.
"""
options = OptionsConfig();
- options.overrides = []
options.addOverride("cdrecord", "/usr/bin/wodim")
self.failUnlessEqual([ CommandOverride("cdrecord", "/usr/bin/wodim"), ], options.overrides);
@@ -6067,7 +6066,6 @@
Test replaceOverride() with no existing overrides.
"""
options = OptionsConfig();
- options.overrides = []
options.replaceOverride("cdrecord", "/usr/bin/wodim")
self.failUnlessEqual([ CommandOverride("cdrecord", "/usr/bin/wodim"), ], options.overrides);
Modified: cedar-backup2/trunk/test/customizetests.py
===================================================================
--- cedar-backup2/trunk/test/customizetests.py 2010-01-10 23:24:37 UTC (rev 962)
+++ cedar-backup2/trunk/test/customizetests.py 2010-01-10 23:57:16 UTC (rev 963)
@@ -77,14 +77,13 @@
"""
config = Config()
options = OptionsConfig();
- options.overrides = []
if PLATFORM == "standard":
config.options = options
customizeOverrides(config)
- self.failUnlessEqual([], options.overrides);
+ self.failUnlessEqual(None, options.overrides);
config.options = options
customizeOverrides(config, platform="standard")
- self.failUnlessEqual([], options.overrides);
+ self.failUnlessEqual(None, options.overrides);
def testCustomizeOverrides_002(self):
"""
@@ -137,7 +136,6 @@
"""
config = Config()
options = OptionsConfig();
- options.overrides = []
if PLATFORM == "debian":
config.options = options
customizeOverrides(config)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 23:24:55
|
Revision: 962
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=962&view=rev
Author: pronovic
Date: 2010-01-10 23:24:37 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Tagging the 2.19.5 release of Cedar Backup.
Added Paths:
-----------
cedar-backup2/tags/CEDAR_BACKUP2_V2.19.5/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 23:24:13
|
Revision: 961
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=961&view=rev
Author: pronovic
Date: 2010-01-10 23:23:57 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Tagging new version of 2.19.5 release of Cedar Backup.
Removed Paths:
-------------
cedar-backup2/tags/CEDAR_BACKUP2_V2.19.5/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 23:23:24
|
Revision: 960
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=960&view=rev
Author: pronovic
Date: 2010-01-10 23:23:14 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Tweak tests so they work properly with Debian customizations
Modified Paths:
--------------
cedar-backup2/trunk/test/customizetests.py
Modified: cedar-backup2/trunk/test/customizetests.py
===================================================================
--- cedar-backup2/trunk/test/customizetests.py 2010-01-10 22:59:22 UTC (rev 959)
+++ cedar-backup2/trunk/test/customizetests.py 2010-01-10 23:23:14 UTC (rev 960)
@@ -49,7 +49,7 @@
import unittest
-from CedarBackup2.customize import customizeOverrides
+from CedarBackup2.customize import PLATFORM, customizeOverrides
from CedarBackup2.config import Config, OptionsConfig, CommandOverride
@@ -78,10 +78,11 @@
config = Config()
options = OptionsConfig();
options.overrides = []
+ if PLATFORM == "standard":
+ config.options = options
+ customizeOverrides(config)
+ self.failUnlessEqual([], options.overrides);
config.options = options
- customizeOverrides(config) # relies on default, which should be "standard"
- self.failUnlessEqual([], options.overrides);
- config.options = options
customizeOverrides(config, platform="standard")
self.failUnlessEqual([], options.overrides);
@@ -92,10 +93,11 @@
config = Config()
options = OptionsConfig();
options.overrides = [ CommandOverride("cdrecord", "/blech"), ]
+ if PLATFORM == "standard":
+ config.options = options
+ customizeOverrides(config)
+ self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), ], options.overrides);
config.options = options
- customizeOverrides(config) # relies on default, which should be "standard"
- self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), ], options.overrides);
- config.options = options
customizeOverrides(config, platform="standard")
self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), ], options.overrides);
@@ -106,10 +108,11 @@
config = Config()
options = OptionsConfig();
options.overrides = [ CommandOverride("mkisofs", "/blech"), ]
+ if PLATFORM == "standard":
+ config.options = options
+ customizeOverrides(config)
+ self.failUnlessEqual([ CommandOverride("mkisofs", "/blech"), ], options.overrides);
config.options = options
- customizeOverrides(config) # relies on default, which should be "standard"
- self.failUnlessEqual([ CommandOverride("mkisofs", "/blech"), ], options.overrides);
- config.options = options
customizeOverrides(config, platform="standard")
self.failUnlessEqual([ CommandOverride("mkisofs", "/blech"), ], options.overrides);
@@ -120,10 +123,11 @@
config = Config()
options = OptionsConfig();
options.overrides = [ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/blech2"), ]
+ if PLATFORM == "standard":
+ config.options = options
+ customizeOverrides(config)
+ self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/blech2"), ], options.overrides);
config.options = options
- customizeOverrides(config) # relies on default, which should be "standard"
- self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/blech2"), ], options.overrides);
- config.options = options
customizeOverrides(config, platform="standard")
self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/blech2"), ], options.overrides);
@@ -134,6 +138,10 @@
config = Config()
options = OptionsConfig();
options.overrides = []
+ if PLATFORM == "debian":
+ config.options = options
+ customizeOverrides(config)
+ self.failUnlessEqual([ CommandOverride("cdrecord", "/usr/bin/wodim"), CommandOverride("mkisofs", "/usr/bin/genisoimage"), ], options.overrides);
config.options = options
customizeOverrides(config, platform="debian")
self.failUnlessEqual([ CommandOverride("cdrecord", "/usr/bin/wodim"), CommandOverride("mkisofs", "/usr/bin/genisoimage"), ], options.overrides);
@@ -145,6 +153,10 @@
config = Config()
options = OptionsConfig();
options.overrides = [ CommandOverride("cdrecord", "/blech"), ]
+ if PLATFORM == "debian":
+ config.options = options
+ customizeOverrides(config)
+ self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/usr/bin/genisoimage"), ], options.overrides);
config.options = options
customizeOverrides(config, platform="debian")
self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/usr/bin/genisoimage"), ], options.overrides);
@@ -156,6 +168,10 @@
config = Config()
options = OptionsConfig();
options.overrides = [ CommandOverride("mkisofs", "/blech"), ]
+ if PLATFORM == "debian":
+ config.options = options
+ customizeOverrides(config)
+ self.failUnlessEqual([ CommandOverride("cdrecord", "/usr/bin/wodim"), CommandOverride("mkisofs", "/blech"), ], options.overrides);
config.options = options
customizeOverrides(config, platform="debian")
self.failUnlessEqual([ CommandOverride("cdrecord", "/usr/bin/wodim"), CommandOverride("mkisofs", "/blech"), ], options.overrides);
@@ -167,6 +183,10 @@
config = Config()
options = OptionsConfig();
options.overrides = [ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/blech2"), ]
+ if PLATFORM == "debian":
+ config.options = options
+ customizeOverrides(config)
+ self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/blech2"), ], options.overrides);
config.options = options
customizeOverrides(config, platform="debian")
self.failUnlessEqual([ CommandOverride("cdrecord", "/blech"), CommandOverride("mkisofs", "/blech2"), ], options.overrides);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 22:59:28
|
Revision: 959
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=959&view=rev
Author: pronovic
Date: 2010-01-10 22:59:22 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Remove extraneous print
Modified Paths:
--------------
cedar-backup2/trunk/util/sorttags.py
Modified: cedar-backup2/trunk/util/sorttags.py
===================================================================
--- cedar-backup2/trunk/util/sorttags.py 2010-01-10 22:55:28 UTC (rev 958)
+++ cedar-backup2/trunk/util/sorttags.py 2010-01-10 22:59:22 UTC (rev 959)
@@ -16,7 +16,6 @@
x = re.sub("/", "", x)
x = re.sub("\n", "", x)
components = x.split(".")
- print components
numified = components[0]
numified += "."
for component in components[1:]:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 22:55:45
|
Revision: 958
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=958&view=rev
Author: pronovic
Date: 2010-01-10 22:55:28 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Tagging the 2.19.5 release of Cedar Backup.
Added Paths:
-----------
cedar-backup2/tags/CEDAR_BACKUP2_V2.19.5/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 22:54:29
|
Revision: 957
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=957&view=rev
Author: pronovic
Date: 2010-01-10 22:54:17 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Release 2.19.5
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 2010-01-10 22:49:01 UTC (rev 956)
+++ cedar-backup2/trunk/CedarBackup2/release.py 2010-01-10 22:54:17 UTC (rev 957)
@@ -35,6 +35,6 @@
EMAIL = "pro...@ie..."
COPYRIGHT = "2004-2010"
VERSION = "2.19.5"
-DATE = "unreleased"
+DATE = "10 Jan 2010"
URL = "http://cedar-backup.sourceforge.net/"
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2010-01-10 22:49:01 UTC (rev 956)
+++ cedar-backup2/trunk/Changelog 2010-01-10 22:54:17 UTC (rev 957)
@@ -1,4 +1,4 @@
-Version 2.19.5 unreleased
+Version 2.19.5 10 Jan 2010
* Add customization support, so Debian can use wodim and genisoimage.
* SF bug #2929447 - fix cback-span to only ask for media when needed
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 22:49:35
|
Revision: 956
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=956&view=rev
Author: pronovic
Date: 2010-01-10 22:49:01 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
SF bug #2929447 - fix cback-span to only ask for media when needed
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/tools/span.py
cedar-backup2/trunk/Changelog
Modified: cedar-backup2/trunk/CedarBackup2/tools/span.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/tools/span.py 2010-01-10 22:31:08 UTC (rev 955)
+++ cedar-backup2/trunk/CedarBackup2/tools/span.py 2010-01-10 22:49:01 UTC (rev 956)
@@ -401,17 +401,18 @@
happy = True
print "==="
- print ""
- _getReturn("Please place the first disc in your backup device.\nPress return when ready.")
- print "==="
-
counter = 0
for spanItem in spanSet:
counter += 1
+ if counter == 1:
+ print ""
+ _getReturn("Please place the first disc in your backup device.\nPress return when ready.")
+ print "==="
+ else:
+ print ""
+ _getReturn("Please replace the disc in your backup device.\nPress return when ready.")
+ print "==="
_writeDisc(config, writer, spanItem)
- print ""
- _getReturn("Please replace the disc in your backup device.\nPress return when ready.")
- print "==="
_writeStoreIndicator(config, dailyDirs)
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2010-01-10 22:31:08 UTC (rev 955)
+++ cedar-backup2/trunk/Changelog 2010-01-10 22:49:01 UTC (rev 956)
@@ -1,6 +1,7 @@
Version 2.19.5 unreleased
* Add customization support, so Debian can use wodim and genisoimage.
+ * SF bug #2929447 - fix cback-span to only ask for media when needed
* SF bug #2929446 - add retry logic for writes in cback-span
Version 2.19.4 16 Aug 2009
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 22:31:21
|
Revision: 955
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=955&view=rev
Author: pronovic
Date: 2010-01-10 22:31:08 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
SF bug #2929446: add retry logic for writes in cback-span
Modified Paths:
--------------
cedar-backup2/trunk/Changelog
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2010-01-10 22:29:40 UTC (rev 954)
+++ cedar-backup2/trunk/Changelog 2010-01-10 22:31:08 UTC (rev 955)
@@ -1,6 +1,7 @@
Version 2.19.5 unreleased
* Add customization support, so Debian can use wodim and genisoimage.
+ * SF bug #2929446 - add retry logic for writes in cback-span
Version 2.19.4 16 Aug 2009
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 22:30:13
|
Revision: 954
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=954&view=rev
Author: pronovic
Date: 2010-01-10 22:29:40 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
SF bug #2929446: add retry logic for writes in cback-span
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/tools/span.py
Modified: cedar-backup2/trunk/CedarBackup2/tools/span.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/tools/span.py 2010-01-10 22:28:08 UTC (rev 953)
+++ cedar-backup2/trunk/CedarBackup2/tools/span.py 2010-01-10 22:29:40 UTC (rev 954)
@@ -8,7 +8,7 @@
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
-# Copyright (c) 2007-2008 Kenneth J. Pronovici.
+# Copyright (c) 2007-2008,2010 Kenneth J. Pronovici.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or
@@ -493,19 +493,93 @@
@param spanItem: Span item to write
"""
print ""
- print "Initializing image..."
- writer.initializeImage(newDisc=True, tmpdir=config.options.workingDir)
- for path in spanItem.fileList:
- graftPoint = os.path.dirname(path.replace(config.store.sourceDir, "", 1))
- writer.addImageEntry(path, graftPoint)
- print "Writing image to disc..."
- writer.writeImage()
- if config.store.checkData:
- print "Running consistency check..."
- _consistencyCheck(config, spanItem.fileList)
+ _discInitializeImage(config, writer, spanItem)
+ _discWriteImage(config, writer, spanItem)
+ _discConsistencyCheck(config, writer, spanItem)
print "Write process is complete."
+ print "==="
+def _discInitializeImage(config, writer, spanItem):
+ """
+ Initialize an ISO image for a span item.
+ @param config: Cedar Backup configuration
+ @param writer: Writer to use
+ @param spanItem: Span item to write
+ """
+ complete = False
+ while not complete:
+ try:
+ print "Initializing image..."
+ writer.initializeImage(newDisc=True, tmpdir=config.options.workingDir)
+ for path in spanItem.fileList:
+ graftPoint = os.path.dirname(path.replace(config.store.sourceDir, "", 1))
+ writer.addImageEntry(path, graftPoint)
+ complete = True
+ except KeyboardInterrupt, e:
+ raise e
+ except Exception, e:
+ logger.error("Failed to initialize image: %s" % e)
+ if not _getYesNoAnswer("Retry initialization step?", default="Y"):
+ raise e
+ print "Ok, attempting retry."
+ print "==="
+ print "Completed initializing image."
+def _discWriteImage(config, writer, spanItem):
+ """
+ Writes a ISO image for a span item.
+ @param config: Cedar Backup configuration
+ @param writer: Writer to use
+ @param spanItem: Span item to write
+ """
+ complete = False
+ while not complete:
+ try:
+ print "Writing image to disc..."
+ writer.writeImage()
+ complete = True
+ except KeyboardInterrupt, e:
+ raise e
+ except Exception, e:
+ logger.error("Failed to write image: %s" % e)
+ if not _getYesNoAnswer("Retry this step?", default="Y"):
+ raise e
+ print "Ok, attempting retry."
+ _getReturn("Please replace media if needed.\nPress return when ready.")
+ print "==="
+ print "Completed writing image."
+
+def _discConsistencyCheck(config, writer, spanItem):
+ """
+ Run a consistency check on an ISO image for a span item.
+ @param config: Cedar Backup configuration
+ @param writer: Writer to use
+ @param spanItem: Span item to write
+ """
+ if config.store.checkData:
+ complete = False
+ while not complete:
+ try:
+ print "Running consistency check..."
+ _consistencyCheck(config, spanItem.fileList)
+ complete = True
+ except KeyboardInterrupt, e:
+ raise e
+ except Exception, e:
+ logger.error("Consistency check failed: %s" % e)
+ if not _getYesNoAnswer("Retry the consistency check?", default="Y"):
+ raise e
+ if _getYesNoAnswer("Rewrite the disc first?", default="N"):
+ print "Ok, attempting retry."
+ _getReturn("Please replace the disc in your backup device.\nPress return when ready.")
+ print "==="
+ _discWriteImage(config, writer, spanItem)
+ else:
+ print "Ok, attempting retry."
+ print "==="
+ print "Completed consistency check."
+
+
###############################
# _consistencyCheck() function
###############################
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pro...@us...> - 2010-01-10 22:28:45
|
Revision: 953
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=953&view=rev
Author: pronovic
Date: 2010-01-10 22:28:08 +0000 (Sun, 10 Jan 2010)
Log Message:
-----------
Use key rather than path so we don't accidentally delete backup files rather than the image file
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py
Modified: cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py 2010-01-10 20:11:53 UTC (rev 952)
+++ cedar-backup2/trunk/CedarBackup2/writers/cdwriter.py 2010-01-10 22:28:08 UTC (rev 953)
@@ -911,8 +911,8 @@
capacity = self.retrieveCapacity(entireDisc=self._image.newDisc)
image = IsoImage(self.device, capacity.boundaries)
image.volumeId = self._image.mediaLabel # may be None, which is also valid
- for path in self._image.entries.keys():
- image.addEntry(path, self._image.entries[path], override=False, contentsOnly=True)
+ for key in self._image.entries.keys():
+ image.addEntry(key, self._image.entries[key], override=False, contentsOnly=True)
size = image.getEstimatedSize()
logger.info("Image size will be %s." % displayBytes(size))
available = capacity.bytesAvailable
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|