diff options
79 files changed, 1747 insertions, 1222 deletions
diff --git a/Changes.txt b/Changes.txt index 51a7a7d..5277018 100644 --- a/Changes.txt +++ b/Changes.txt @@ -1,3 +1,11 @@ +2012-09-03, S3QL 1.12 + + * Be more verbose about how to remedy the situation when attempting + to upgrade file system needing fsck. + + * Fsck now detects and fixes directory entries which do not have an + entry type stored in their mode field. + 2012-05-04, S3QL 1.11.1 * Fixed crash when using S3 backend. @@ -5,7 +13,10 @@ * Increase minimum reported file system size to 1 TB, and work around df bug so that size is reported properly. - + + * umount.s3ql now produces a more helpful error message if the + file system has crashed. + 2012-04-29, S3QL 1.11 * S3QL no longer uses the confusing "bucket" term (which is S3 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: s3ql -Version: 1.11.1 +Version: 1.12 Summary: a full-featured file system for online data storage Home-page: http://code.google.com/p/s3ql/ Author: Nikolaus Rath diff --git a/contrib/benchmark.py b/contrib/benchmark.py index f171073..e217332 100755 --- a/contrib/benchmark.py +++ b/contrib/benchmark.py @@ -113,7 +113,7 @@ def main(args=None): subprocess.check_call(['umount.s3ql', mnt_dir]) fuse_speed = copied / write_time - log.info('Cache throughput: %d KB/sec', fuse_speed / 1024) + log.info('Cache throughput: %d KiB/sec', fuse_speed / 1024) # Upload random data to prevent effects of compression # on the network layer @@ -142,12 +142,12 @@ def main(args=None): (upload_size, upload_time) = backend.perform_write(do_write, 's3ql_testdata') upload_time = time.time() - upload_time backend_speed = upload_size / upload_time - log.info('Backend throughput: %d KB/sec', backend_speed / 1024) + log.info('Backend throughput: %d KiB/sec', backend_speed / 1024) backend.delete('s3ql_testdata') src = options.file size = os.fstat(options.file.fileno()).st_size - log.info('Test file size: %.2f MB', (size / 1024 ** 2)) + log.info('Test file size: %.2f MiB', (size / 1024 ** 2)) in_speed = dict() out_speed = dict() @@ -167,8 +167,8 @@ def main(args=None): dt = time.time() - stamp in_speed[alg] = size / dt out_speed[alg] = dst_fh.get_obj_size() / dt - log.info('%s compression speed: %d KB/sec per thread (in)', alg, in_speed[alg] / 1024) - log.info('%s compression speed: %d KB/sec per thread (out)', alg, out_speed[alg] / 1024) + log.info('%s compression speed: %d KiB/sec per thread (in)', alg, in_speed[alg] / 1024) + log.info('%s compression speed: %d KiB/sec per thread (out)', alg, out_speed[alg] / 1024) print('') @@ -201,7 +201,7 @@ def main(args=None): speeds.append(speed / 1024) print('%-26s' % ('Max FS throughput (%s):' % alg), - ('%7d KB/s' * len(threads)) % tuple(speeds)) + ('%7d KiB/s' * len(threads)) % tuple(speeds)) print('%-26s' % '..limited by:', ('%12s' * len(threads)) % tuple(limits)) diff --git a/contrib/expire_backups.1 b/contrib/expire_backups.1 index 0c72d4b..2aaa4ab 100644 --- a/contrib/expire_backups.1 +++ b/contrib/expire_backups.1 @@ -1,4 +1,4 @@ -.TH "EXPIRE_BACKUPS" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "EXPIRE_BACKUPS" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME expire_backups \- Intelligently expire old backups . diff --git a/contrib/pcp.1 b/contrib/pcp.1 index 0de1312..f14f1e5 100644 --- a/contrib/pcp.1 +++ b/contrib/pcp.1 @@ -1,4 +1,4 @@ -.TH "PCP" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "PCP" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME pcp \- Recursive, parallel copy of directory trees . diff --git a/doc/html/.buildinfo b/doc/html/.buildinfo index 690e76e..32ca797 100644 --- a/doc/html/.buildinfo +++ b/doc/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: a755e82483ba73a999549c95c58fcb2a +config: 5f4ff63492a9b107a00c2cd82913c2a6 tags: fbb0d17656682115ca4d033fb2f83ba1 diff --git a/doc/html/_sources/issues.txt b/doc/html/_sources/issues.txt index 9e9db5d..b5d8735 100644 --- a/doc/html/_sources/issues.txt +++ b/doc/html/_sources/issues.txt @@ -10,9 +10,9 @@ Known Issues details. * S3QL is rather slow when an application tries to write data in - unreasonably small chunks. If a 1 MB file is copied in chunks of 1 + unreasonably small chunks. If a 1 MiB file is copied in chunks of 1 KB, this will take more than 10 times as long as when it's copied - with the (recommended) chunk size of 128 KB. + with the (recommended) chunk size of 128 KiB. This is a limitation of the FUSE library (which does not yet support write caching) which will hopefully be addressed in some future FUSE diff --git a/doc/html/_sources/man/ctrl.txt b/doc/html/_sources/man/ctrl.txt index 8173162..0acc8f0 100644 --- a/doc/html/_sources/man/ctrl.txt +++ b/doc/html/_sources/man/ctrl.txt @@ -41,7 +41,7 @@ upload-meta cachesize Changes the cache size of the file system. This action requires an - additional argument that specifies the new cache size in kB, so the + additional argument that specifies the new cache size in KiB, so the complete command line is:: s3qlctrl [options] cachesize <mountpoint> <new-cache-size> diff --git a/doc/html/_static/jquery.js b/doc/html/_static/jquery.js index 8ccd0ea..f8b3fb8 100644 --- a/doc/html/_static/jquery.js +++ b/doc/html/_static/jquery.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v1.7.1 + * jQuery JavaScript Library v1.7.2 * http://jquery.com/ * * Copyright 2011, John Resig @@ -11,7 +11,7 @@ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Mon Nov 21 21:11:03 2011 -0500 + * Date: Sat Aug 4 06:33:40 UTC 2012 */ (function( window, undefined ) { @@ -210,7 +210,7 @@ jQuery.fn = jQuery.prototype = { selector: "", // The current version of jQuery being used - jquery: "1.7.1", + jquery: "1.7.2", // The default length of a jQuery object is 0 length: 0, @@ -497,9 +497,8 @@ jQuery.extend({ return jQuery.type(obj) === "array"; }, - // A crude way of determining if an object is a window isWindow: function( obj ) { - return obj && typeof obj === "object" && "setInterval" in obj; + return obj != null && obj == obj.window; }, isNumeric: function( obj ) { @@ -579,6 +578,9 @@ jQuery.extend({ // Cross-browser xml parsing parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } var xml, tmp; try { if ( window.DOMParser ) { // Standard @@ -822,31 +824,55 @@ jQuery.extend({ // Mutifunctional method to get and set values to a collection // The value/s can optionally be executed if it's a function - access: function( elems, key, value, exec, fn, pass ) { - var length = elems.length; + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - jQuery.access( elems, k, key[k], exec, fn, value ); + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); } - return elems; - } + chainable = 1; - // Setting one attribute - if ( value !== undefined ) { + // Sets one value + } else if ( value !== undefined ) { // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } } - return elems; + chainable = 1; } - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; }, now: function() { @@ -1005,6 +1031,8 @@ jQuery.Callbacks = function( flags ) { stack = [], // Last fire value (for non-forgettable lists) memory, + // Flag to know if list was already fired + fired, // Flag to know if list is currently firing firing, // First callback to fire (used internally by add and fireWith) @@ -1038,6 +1066,7 @@ jQuery.Callbacks = function( flags ) { fire = function( context, args ) { args = args || []; memory = !flags.memory || [ context, args ]; + fired = true; firing = true; firingIndex = firingStart || 0; firingStart = 0; @@ -1173,7 +1202,7 @@ jQuery.Callbacks = function( flags ) { }, // To know if the callbacks have already been called at least once fired: function() { - return !!memory; + return !!fired; } }; @@ -1336,7 +1365,6 @@ jQuery.support = (function() { select, opt, input, - marginDiv, fragment, tds, events, @@ -1419,9 +1447,13 @@ jQuery.support = (function() { noCloneEvent: true, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, - reliableMarginRight: true + reliableMarginRight: true, + pixelMargin: true }; + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + // Make sure checked status is properly cloned input.checked = true; support.noCloneChecked = input.cloneNode( true ).checked; @@ -1456,6 +1488,10 @@ jQuery.support = (function() { support.radioValue = input.value === "t"; input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + div.appendChild( input ); fragment = document.createDocumentFragment(); fragment.appendChild( div.lastChild ); @@ -1470,23 +1506,6 @@ jQuery.support = (function() { fragment.removeChild( input ); fragment.appendChild( div ); - div.innerHTML = ""; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. For more - // info see bug #3333 - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - if ( window.getComputedStyle ) { - marginDiv = document.createElement( "div" ); - marginDiv.style.width = "0"; - marginDiv.style.marginRight = "0"; - div.style.width = "2px"; - div.appendChild( marginDiv ); - support.reliableMarginRight = - ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; - } - // Technique from Juriy Zaytsev // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ // We only care about the case where non-standard event systems @@ -1494,7 +1513,7 @@ jQuery.support = (function() { // avoid an eval call (in setAttribute) which can cause CSP // to go haywire. See: https://developer.mozilla.org/en/Security/CSP if ( div.attachEvent ) { - for( i in { + for ( i in { submit: 1, change: 1, focusin: 1 @@ -1512,12 +1531,13 @@ jQuery.support = (function() { fragment.removeChild( div ); // Null elements to avoid leaks in IE - fragment = select = opt = marginDiv = div = input = null; + fragment = select = opt = div = input = null; // Run tests that need a body at doc ready jQuery(function() { var container, outer, inner, table, td, offsetSupport, - conMarginTop, ptlm, vb, style, html, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, body = document.getElementsByTagName("body")[0]; if ( !body ) { @@ -1526,15 +1546,16 @@ jQuery.support = (function() { } conMarginTop = 1; - ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;"; - vb = "visibility:hidden;border:0;"; - style = "style='" + ptlm + "border:5px solid #000;padding:0;'"; - html = "<div " + style + "><div></div></div>" + - "<table " + style + " cellpadding='0' cellspacing='0'>" + + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" + + "<table " + style + "' cellpadding='0' cellspacing='0'>" + "<tr><td></td></tr></table>"; container = document.createElement("div"); - container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; body.insertBefore( container, body.firstChild ); // Construct the test element @@ -1548,7 +1569,7 @@ jQuery.support = (function() { // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) - div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>"; + div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>"; tds = div.getElementsByTagName( "td" ); isSupported = ( tds[ 0 ].offsetHeight === 0 ); @@ -1559,28 +1580,44 @@ jQuery.support = (function() { // (IE <= 8 fail this test) support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - // Figure out if the W3C box model works as expected - div.innerHTML = ""; - div.style.width = div.style.paddingLeft = "1px"; - jQuery.boxModel = support.boxModel = div.offsetWidth === 2; + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } if ( typeof div.style.zoom !== "undefined" ) { // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; div.style.display = "inline"; div.style.zoom = 1; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); // Check if elements with layout shrink-wrap their children // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "<div style='width:4px;'></div>"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "<div style='width:5px;'></div>"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); } - div.style.cssText = ptlm + vb; + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; div.innerHTML = html; outer = div.firstChild; @@ -1605,8 +1642,17 @@ jQuery.support = (function() { offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + body.removeChild( container ); - div = container = null; + marginDiv = div = container = null; jQuery.extend( support, offsetSupport ); }); @@ -1863,62 +1909,70 @@ jQuery.extend({ jQuery.fn.extend({ data: function( key, value ) { - var parts, attr, name, + var parts, part, attr, name, l, + elem = this[0], + i = 0, data = null; - if ( typeof key === "undefined" ) { + // Gets all values + if ( key === undefined ) { if ( this.length ) { - data = jQuery.data( this[0] ); + data = jQuery.data( elem ); - if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) { - attr = this[0].attributes; - for ( var i = 0, l = attr.length; i < l; i++ ) { + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { name = attr[i].name; if ( name.indexOf( "data-" ) === 0 ) { name = jQuery.camelCase( name.substring(5) ); - dataAttr( this[0], name, data[ name ] ); + dataAttr( elem, name, data[ name ] ); } } - jQuery._data( this[0], "parsedAttrs", true ); + jQuery._data( elem, "parsedAttrs", true ); } } return data; + } - } else if ( typeof key === "object" ) { + // Sets multiple values + if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } - parts = key.split("."); + parts = key.split( ".", 2 ); parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; - if ( value === undefined ) { - data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + return jQuery.access( this, function( value ) { - // Try to fetch any internally stored data first - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - data = dataAttr( this[0], key, data ); - } + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } - } else { - return this.each(function() { - var self = jQuery( this ), - args = [ parts[0], value ]; + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } - self.triggerHandler( "setData" + parts[1] + "!", args ); + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); jQuery.data( this, key, value ); - self.triggerHandler( "changeData" + parts[1] + "!", args ); + self.triggerHandler( "changeData" + part, parts ); }); - } + }, null, value, arguments.length > 1, null, false ); }, removeData: function( key ) { @@ -1942,7 +1996,7 @@ function dataAttr( elem, key, data ) { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : - jQuery.isNumeric( data ) ? parseFloat( data ) : + jQuery.isNumeric( data ) ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} @@ -2077,21 +2131,27 @@ jQuery.extend({ jQuery.fn.extend({ queue: function( type, data ) { + var setter = 2; + if ( typeof type !== "string" ) { data = type; type = "fx"; + setter--; } - if ( data === undefined ) { + if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } - return this.each(function() { - var queue = jQuery.queue( this, type, data ); - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); }, dequeue: function( type ) { return this.each(function() { @@ -2145,7 +2205,7 @@ jQuery.fn.extend({ } } resolve(); - return defer.promise(); + return defer.promise( object ); } }); @@ -2164,7 +2224,7 @@ var rclass = /[\n\t\r]/g, jQuery.fn.extend({ attr: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.attr ); + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); }, removeAttr: function( name ) { @@ -2174,7 +2234,7 @@ jQuery.fn.extend({ }, prop: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.prop ); + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); }, removeProp: function( name ) { @@ -2314,7 +2374,7 @@ jQuery.fn.extend({ if ( !arguments.length ) { if ( elem ) { - hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { return ret; @@ -2358,7 +2418,7 @@ jQuery.fn.extend({ }); } - hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // If set returns undefined, fall back to normal setting if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { @@ -2504,7 +2564,7 @@ jQuery.extend({ }, removeAttr: function( elem, value ) { - var propName, attrNames, name, l, + var propName, attrNames, name, l, isBool, i = 0; if ( value && elem.nodeType === 1 ) { @@ -2516,13 +2576,17 @@ jQuery.extend({ if ( name ) { propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); // See #9699 for explanation of this approach (setting first, then removal) - jQuery.attr( elem, name, "" ); + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } elem.removeAttribute( getSetAttribute ? name : propName ); // Set corresponding property to false for boolean attributes - if ( rboolean.test( name ) && propName in elem ) { + if ( isBool && propName in elem ) { elem[ propName ] = false; } } @@ -2676,7 +2740,8 @@ if ( !getSetAttribute ) { fixSpecified = { name: true, - id: true + id: true, + coords: true }; // Use this for any attribute in IE6/7 @@ -2806,7 +2871,7 @@ jQuery.each([ "radio", "checkbox" ], function() { var rformElems = /^(?:textarea|input|select)$/i, rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, - rhoverHack = /\bhover(\.\S+)?\b/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, @@ -2854,6 +2919,7 @@ jQuery.event = { if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; + selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later @@ -2905,7 +2971,7 @@ jQuery.event = { handler: handler, guid: handler.guid, selector: selector, - quick: quickParse( selector ), + quick: selector && quickParse( selector ), namespace: namespaces.join(".") }, handleObjIn ); @@ -3194,6 +3260,7 @@ jQuery.event = { delegateCount = handlers.delegateCount, args = [].slice.call( arguments, 0 ), run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, handlerQueue = [], i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; @@ -3201,34 +3268,43 @@ jQuery.event = { args[0] = event; event.delegateTarget = this; + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + // Determine handlers that should run if there are delegated events - // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861) - if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { // Pregenerate a single jQuery object for reuse with .is() jqcur = jQuery(this); jqcur.context = this.ownerDocument || this; for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { - selMatch = {}; - matches = []; - jqcur[0] = cur; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - sel = handleObj.selector; - - if ( selMatch[ sel ] === undefined ) { - selMatch[ sel ] = ( - handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) - ); + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } } - if ( selMatch[ sel ] ) { - matches.push( handleObj ); + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); } } - if ( matches.length ) { - handlerQueue.push({ elem: cur, matches: matches }); - } } } @@ -3266,6 +3342,11 @@ jQuery.event = { } } + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + return event.result; }, @@ -3557,16 +3638,23 @@ if ( !jQuery.support.submitBubbles ) { form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; if ( form && !form._submit_attached ) { jQuery.event.add( form, "submit._submit", function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } + event._submit_bubble = true; }); form._submit_attached = true; } }); // return undefined since we don't need an event listener }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, teardown: function() { // Only need this for delegated form submit events @@ -3671,9 +3759,9 @@ jQuery.fn.extend({ // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { + if ( typeof selector !== "string" ) { // && selector != null // ( types-Object, data ) - data = selector; + data = data || selector; selector = undefined; } for ( type in types ) { @@ -3719,14 +3807,14 @@ jQuery.fn.extend({ }); }, one: function( types, selector, data, fn ) { - return this.on.call( this, types, selector, data, fn, 1 ); + return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event var handleObj = types.handleObj; jQuery( types.delegateTarget ).off( - handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type, + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); @@ -3885,7 +3973,7 @@ var Sizzle = function( selector, context, results, seed ) { if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; } - + if ( !selector || typeof selector !== "string" ) { return results; } @@ -3895,7 +3983,7 @@ var Sizzle = function( selector, context, results, seed ) { contextXML = Sizzle.isXML( context ), parts = [], soFar = selector; - + // Reset the position of the chunker regexp (start from head) do { chunker.exec( "" ); @@ -3903,9 +3991,9 @@ var Sizzle = function( selector, context, results, seed ) { if ( m ) { soFar = m[3]; - + parts.push( m[1] ); - + if ( m[2] ) { extra = m[3]; break; @@ -3929,7 +4017,7 @@ var Sizzle = function( selector, context, results, seed ) { if ( Expr.relative[ selector ] ) { selector += parts.shift(); } - + set = posProcess( selector, set, seed ); } } @@ -4057,7 +4145,7 @@ Sizzle.find = function( expr, context, isXML ) { for ( i = 0, len = Expr.order.length; i < len; i++ ) { type = Expr.order[i]; - + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { left = match[1]; match.splice( 1, 1 ); @@ -4189,7 +4277,7 @@ var getText = Sizzle.getText = function( elem ) { ret = ""; if ( nodeType ) { - if ( nodeType === 1 || nodeType === 9 ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent || innerText for elements if ( typeof elem.textContent === 'string' ) { return elem.textContent; @@ -4429,7 +4517,7 @@ var Expr = Sizzle.selectors = { ATTR: function( match, curLoop, inplace, result, not, isXML ) { var name = match[1] = match[1].replace( rBackslash, "" ); - + if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } @@ -4463,7 +4551,7 @@ var Expr = Sizzle.selectors = { } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } - + return match; }, @@ -4473,7 +4561,7 @@ var Expr = Sizzle.selectors = { return match; } }, - + filters: { enabled: function( elem ) { return elem.disabled === false && elem.type !== "hidden"; @@ -4486,14 +4574,14 @@ var Expr = Sizzle.selectors = { checked: function( elem ) { return elem.checked === true; }, - + selected: function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } - + return elem.selected === true; }, @@ -4515,7 +4603,7 @@ var Expr = Sizzle.selectors = { text: function( elem ) { var attr = elem.getAttribute( "type" ), type = elem.type; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); }, @@ -4633,22 +4721,23 @@ var Expr = Sizzle.selectors = { switch ( type ) { case "only": case "first": - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; } } - if ( type === "first" ) { - return true; + if ( type === "first" ) { + return true; } node = elem; + /* falls through */ case "last": - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; } } @@ -4661,22 +4750,22 @@ var Expr = Sizzle.selectors = { if ( first === 1 && last === 0 ) { return true; } - + doneName = match[0]; parent = elem.parentNode; - + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { count = 0; - + for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } - } + } parent[ expando ] = doneName; } - + diff = elem.nodeIndex - last; if ( first === 0 ) { @@ -4695,7 +4784,7 @@ var Expr = Sizzle.selectors = { TAG: function( elem, match ) { return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; }, - + CLASS: function( elem, match ) { return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; @@ -4757,6 +4846,9 @@ for ( var type in Expr.match ) { Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); } +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; var makeArray = function( array, results ) { array = Array.prototype.slice.call( array, 0 ); @@ -4765,7 +4857,7 @@ var makeArray = function( array, results ) { results.push.apply( results, array ); return results; } - + return array; }; @@ -4997,7 +5089,7 @@ if ( document.querySelectorAll ) { if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } - + Sizzle = function( query, context, extra, seed ) { context = context || document; @@ -5006,24 +5098,24 @@ if ( document.querySelectorAll ) { if ( !seed && !Sizzle.isXML(context) ) { // See if we find a selector to speed up var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); - + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { // Speed-up: Sizzle("TAG") if ( match[1] ) { return makeArray( context.getElementsByTagName( query ), extra ); - + // Speed-up: Sizzle(".CLASS") } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { return makeArray( context.getElementsByClassName( match[2] ), extra ); } } - + if ( context.nodeType === 9 ) { // Speed-up: Sizzle("body") // The body element only exists once, optimize finding it if ( query === "body" && context.body ) { return makeArray( [ context.body ], extra ); - + // Speed-up: Sizzle("#ID") } else if ( match && match[3] ) { var elem = context.getElementById( match[3] ); @@ -5036,12 +5128,12 @@ if ( document.querySelectorAll ) { if ( elem.id === match[3] ) { return makeArray( [ elem ], extra ); } - + } else { return makeArray( [], extra ); } } - + try { return makeArray( context.querySelectorAll(query), extra ); } catch(qsaError) {} @@ -5079,7 +5171,7 @@ if ( document.querySelectorAll ) { } } } - + return oldSizzle(query, context, extra, seed); }; @@ -5106,7 +5198,7 @@ if ( document.querySelectorAll ) { // This should fail with an exception // Gecko does not error, returns false instead matches.call( document.documentElement, "[test!='']:sizzle" ); - + } catch( pseudoError ) { pseudoWorks = true; } @@ -5116,7 +5208,7 @@ if ( document.querySelectorAll ) { expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); if ( !Sizzle.isXML( node ) ) { - try { + try { if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { var ret = matches.call( node, expr ); @@ -5153,7 +5245,7 @@ if ( document.querySelectorAll ) { if ( div.getElementsByClassName("e").length === 1 ) { return; } - + Expr.order.splice(1, 0, "CLASS"); Expr.find.CLASS = function( match, context, isXML ) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { @@ -5204,7 +5296,7 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { if ( elem ) { var match = false; - + elem = elem[dir]; while ( elem ) { @@ -5257,7 +5349,7 @@ if ( document.documentElement.contains ) { Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) + // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; @@ -5307,7 +5399,7 @@ var runtil = /Until$/, rmultiselector = /,/, isSimple = /^.[^:#\[\.,]*$/, slice = Array.prototype.slice, - POS = jQuery.expr.match.POS, + POS = jQuery.expr.match.globalPOS, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, @@ -5374,11 +5466,11 @@ jQuery.fn.extend({ }, is: function( selector ) { - return !!selector && ( + return !!selector && ( typeof selector === "string" ? // If this is a positional selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". - POS.test( selector ) ? + POS.test( selector ) ? jQuery( selector, this.context ).index( this[0] ) >= 0 : jQuery.filter( selector, this ).length > 0 : this.filter( selector ).length > 0 ); @@ -5386,7 +5478,7 @@ jQuery.fn.extend({ closest: function( selectors, context ) { var ret = [], i, l, cur = this[0]; - + // Array (deprecated as of jQuery 1.7) if ( jQuery.isArray( selectors ) ) { var level = 1; @@ -5505,7 +5597,7 @@ jQuery.each({ return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); @@ -5639,7 +5731,7 @@ function createSafeFragment( document ) { return safeFrag; } -var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, rleadingWhitespace = /^\s+/, @@ -5649,7 +5741,7 @@ var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|fig rhtml = /<|&#?\w+;/, rnoInnerhtml = /<(?:script|style)/i, rnocache = /<(?:script|object|embed|option|style)/i, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"), + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptType = /\/(java|ecma)script/i, @@ -5676,20 +5768,12 @@ if ( !jQuery.support.htmlSerialize ) { } jQuery.fn.extend({ - text: function( text ) { - if ( jQuery.isFunction(text) ) { - return this.each(function(i) { - var self = jQuery( this ); - - self.text( text.call(this, i, self.text()) ); - }); - } - - if ( typeof text !== "object" && text !== undefined ) { - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - } - - return jQuery.text( this ); + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); }, wrapAll: function( html ) { @@ -5841,44 +5925,44 @@ jQuery.fn.extend({ }, html: function( value ) { - if ( value === undefined ) { - return this[0] && this[0].nodeType === 1 ? - this[0].innerHTML.replace(rinlinejQuery, "") : - null; + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; - // See if we can take a shortcut and just use innerHTML - } else if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) && - !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) { + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + null; + } - value = value.replace(rxhtmlTag, "<$1></$2>"); - try { - for ( var i = 0, l = this.length; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - if ( this[i].nodeType === 1 ) { - jQuery.cleanData( this[i].getElementsByTagName("*") ); - this[i].innerHTML = value; - } - } + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - // If using innerHTML throws an exception, use the fallback method - } catch(e) { - this.empty().append( value ); - } + value = value.replace( rxhtmlTag, "<$1></$2>" ); - } else if ( jQuery.isFunction( value ) ) { - this.each(function(i){ - var self = jQuery( this ); + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } - self.html( value.call(this, i, self.html()) ); - }); + elem = 0; - } else { - this.empty().append( value ); - } + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } - return this; + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); }, replaceWith: function( value ) { @@ -5981,7 +6065,23 @@ jQuery.fn.extend({ } if ( scripts.length ) { - jQuery.each( scripts, evalScript ); + jQuery.each( scripts, function( i, elem ) { + if ( elem.src ) { + jQuery.ajax({ + type: "GET", + global: false, + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + }); } } @@ -6013,7 +6113,7 @@ function cloneCopyEvent( src, dest ) { for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data ); + jQuery.event.add( dest, type, events[ type ][ i ] ); } } } @@ -6075,11 +6175,20 @@ function cloneFixAttributes( src, dest ) { // cloning other types of input fields } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; + + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; } // Event data gets referenced instead of copied if the expando // gets copied too dest.removeAttribute( jQuery.expando ); + + // Clear flags for bubbling special change/submit events, they must + // be reattached when the newly cloned events are first activated + dest.removeAttribute( "_submit_attached" ); + dest.removeAttribute( "_change_attached" ); } jQuery.buildFragment = function( args, nodes, scripts ) { @@ -6204,7 +6313,7 @@ jQuery.extend({ destElements, i, // IE<=8 does not properly clone detached, unknown element nodes - clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ? + clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ? elem.cloneNode( true ) : shimCloneNode( elem ); @@ -6254,7 +6363,8 @@ jQuery.extend({ }, clean: function( elems, context, fragment, scripts ) { - var checkScriptType; + var checkScriptType, script, j, + ret = []; context = context || document; @@ -6263,8 +6373,6 @@ jQuery.extend({ context = context.ownerDocument || context[0] && context[0].ownerDocument || document; } - var ret = [], j; - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { if ( typeof elem === "number" ) { elem += ""; @@ -6286,7 +6394,9 @@ jQuery.extend({ var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(), wrap = wrapMap[ tag ] || wrapMap._default, depth = wrap[0], - div = context.createElement("div"); + div = context.createElement("div"), + safeChildNodes = safeFragment.childNodes, + remove; // Append wrapper element to unknown element safe doc fragment if ( context === document ) { @@ -6331,6 +6441,21 @@ jQuery.extend({ } elem = div.childNodes; + + // Clear elements from DocumentFragment (safeFragment or otherwise) + // to avoid hoarding elements. Fixes #11356 + if ( div ) { + div.parentNode.removeChild( div ); + + // Guard against -1 index exceptions in FF3.6 + if ( safeChildNodes.length > 0 ) { + remove = safeChildNodes[ safeChildNodes.length - 1 ]; + + if ( remove && remove.parentNode ) { + remove.parentNode.removeChild( remove ); + } + } + } } } @@ -6359,16 +6484,17 @@ jQuery.extend({ return !elem.type || rscriptType.test( elem.type ); }; for ( i = 0; ret[i]; i++ ) { - if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { - scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); + script = ret[i]; + if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) { + scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script ); } else { - if ( ret[i].nodeType === 1 ) { - var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType ); + if ( script.nodeType === 1 ) { + var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType ); ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); } - fragment.appendChild( ret[i] ); + fragment.appendChild( script ); } } } @@ -6422,22 +6548,6 @@ jQuery.extend({ } }); -function evalScript( i, elem ) { - if ( elem.src ) { - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - } else { - jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) ); - } - - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } -} - @@ -6445,29 +6555,27 @@ var ralpha = /alpha\([^)]*\)/i, ropacity = /opacity=([^)]*)/, // fixed for IE9, see #8346 rupper = /([A-Z]|^ms)/g, - rnumpx = /^-?\d+(?:px)?$/i, - rnum = /^-?\d/, + rnum = /^[\-+]?(?:\d*\.)?\d+$/i, + rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i, rrelNum = /^([\-+])=([\-+.\de]+)/, + rmargin = /^margin/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssWidth = [ "Left", "Right" ], - cssHeight = [ "Top", "Bottom" ], + + // order is important! + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + curCSS, getComputedStyle, currentStyle; jQuery.fn.css = function( name, value ) { - // Setting 'undefined' is a no-op - if ( arguments.length === 2 && value === undefined ) { - return this; - } - - return jQuery.access( this, name, value, true, function( elem, name, value ) { + return jQuery.access( this, function( elem, name, value ) { return value !== undefined ? jQuery.style( elem, name, value ) : jQuery.css( elem, name ); - }); + }, name, value, arguments.length > 1 ); }; jQuery.extend({ @@ -6478,7 +6586,7 @@ jQuery.extend({ get: function( elem, computed ) { if ( computed ) { // We should always get a number back from opacity - var ret = curCSS( elem, "opacity", "opacity" ); + var ret = curCSS( elem, "opacity" ); return ret === "" ? "1" : ret; } else { @@ -6586,137 +6694,55 @@ jQuery.extend({ // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback ) { - var old = {}; + var old = {}, + ret, name; // Remember the old values, and insert the new ones - for ( var name in options ) { + for ( name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } - callback.call( elem ); + ret = callback.call( elem ); // Revert the old values for ( name in options ) { elem.style[ name ] = old[ name ]; } + + return ret; } }); -// DEPRECATED, Use jQuery.css() instead +// DEPRECATED in 1.3, Use jQuery.css() instead jQuery.curCSS = jQuery.css; -jQuery.each(["height", "width"], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - var val; - - if ( computed ) { - if ( elem.offsetWidth !== 0 ) { - return getWH( elem, name, extra ); - } else { - jQuery.swap( elem, cssShow, function() { - val = getWH( elem, name, extra ); - }); - } - - return val; - } - }, - - set: function( elem, value ) { - if ( rnumpx.test( value ) ) { - // ignore negative width and height values #1599 - value = parseFloat( value ); - - if ( value >= 0 ) { - return value + "px"; - } - - } else { - return value; - } - } - }; -}); - -if ( !jQuery.support.opacity ) { - jQuery.cssHooks.opacity = { - get: function( elem, computed ) { - // IE uses filters for opacity - return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? - ( parseFloat( RegExp.$1 ) / 100 ) + "" : - computed ? "1" : ""; - }, - - set: function( elem, value ) { - var style = elem.style, - currentStyle = elem.currentStyle, - opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", - filter = currentStyle && currentStyle.filter || style.filter || ""; - - // IE has trouble with opacity if it does not have layout - // Force it by setting the zoom level - style.zoom = 1; - - // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 - if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) { - - // Setting style.filter to null, "" & " " still leave "filter:" in the cssText - // if "filter:" is present at all, clearType is disabled, we want to avoid this - // style.removeAttribute is IE Only, but so apparently is this code path... - style.removeAttribute( "filter" ); - - // if there there is no filter style applied in a css rule, we are done - if ( currentStyle && !currentStyle.filter ) { - return; - } - } - - // otherwise, set new filter values - style.filter = ralpha.test( filter ) ? - filter.replace( ralpha, opacity ) : - filter + " " + opacity; - } - }; -} - -jQuery(function() { - // This hook cannot be added until DOM ready because the support test - // for it is not run until after DOM ready - if ( !jQuery.support.reliableMarginRight ) { - jQuery.cssHooks.marginRight = { - get: function( elem, computed ) { - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // Work around by temporarily setting element display to inline-block - var ret; - jQuery.swap( elem, { "display": "inline-block" }, function() { - if ( computed ) { - ret = curCSS( elem, "margin-right", "marginRight" ); - } else { - ret = elem.style.marginRight; - } - }); - return ret; - } - }; - } -}); - if ( document.defaultView && document.defaultView.getComputedStyle ) { getComputedStyle = function( elem, name ) { - var ret, defaultView, computedStyle; + var ret, defaultView, computedStyle, width, + style = elem.style; name = name.replace( rupper, "-$1" ).toLowerCase(); if ( (defaultView = elem.ownerDocument.defaultView) && (computedStyle = defaultView.getComputedStyle( elem, null )) ) { + ret = computedStyle.getPropertyValue( name ); if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) { ret = jQuery.style( elem, name ); } } + // A tribute to the "awesome hack by Dean Edwards" + // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins + // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) { + width = style.width; + style.width = ret; + ret = computedStyle.width; + style.width = width; + } + return ret; }; } @@ -6729,7 +6755,7 @@ if ( document.documentElement.currentStyle ) { // Avoid setting ret to empty string here // so we don't default to auto - if ( ret === null && style && (uncomputed = style[ name ]) ) { + if ( ret == null && style && (uncomputed = style[ name ]) ) { ret = uncomputed; } @@ -6738,7 +6764,7 @@ if ( document.documentElement.currentStyle ) { // If we're not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels - if ( !rnumpx.test( ret ) && rnum.test( ret ) ) { + if ( rnumnonpx.test( ret ) ) { // Remember the original values left = style.left; @@ -6748,7 +6774,7 @@ if ( document.documentElement.currentStyle ) { if ( rsLeft ) { elem.runtimeStyle.left = elem.currentStyle.left; } - style.left = name === "fontSize" ? "1em" : ( ret || 0 ); + style.left = name === "fontSize" ? "1em" : ret; ret = style.pixelLeft + "px"; // Revert the changed values @@ -6764,24 +6790,23 @@ if ( document.documentElement.currentStyle ) { curCSS = getComputedStyle || currentStyle; -function getWH( elem, name, extra ) { +function getWidthOrHeight( elem, name, extra ) { // Start with offset property var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - which = name === "width" ? cssWidth : cssHeight, - i = 0, - len = which.length; + i = name === "width" ? 1 : 0, + len = 4; if ( val > 0 ) { if ( extra !== "border" ) { - for ( ; i < len; i++ ) { + for ( ; i < len; i += 2 ) { if ( !extra ) { - val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0; + val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0; } if ( extra === "margin" ) { - val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0; + val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0; } else { - val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0; + val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; } } } @@ -6790,22 +6815,28 @@ function getWH( elem, name, extra ) { } // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, name ); + val = curCSS( elem, name ); if ( val < 0 || val == null ) { - val = elem.style[ name ] || 0; + val = elem.style[ name ]; } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + // Normalize "", auto, and prepare for extra val = parseFloat( val ) || 0; // Add padding, border, margin if ( extra ) { - for ( ; i < len; i++ ) { - val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0; + for ( ; i < len; i += 2 ) { + val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0; if ( extra !== "padding" ) { - val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0; + val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; } if ( extra === "margin" ) { - val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0; + val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0; } } } @@ -6813,6 +6844,89 @@ function getWH( elem, name, extra ) { return val + "px"; } +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + if ( elem.offsetWidth !== 0 ) { + return getWidthOrHeight( elem, name, extra ); + } else { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } + } + }, + + set: function( elem, value ) { + return rnum.test( value ) ? + value + "px" : + value; + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( parseFloat( RegExp.$1 ) / 100 ) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; +} + +jQuery(function() { + // This hook cannot be added until DOM ready because the support test + // for it is not run until after DOM ready + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "margin-right" ); + } else { + return elem.style.marginRight; + } + }); + } + }; + } +}); + if ( jQuery.expr && jQuery.expr.filters ) { jQuery.expr.filters.hidden = function( elem ) { var width = elem.offsetWidth, @@ -6826,6 +6940,31 @@ if ( jQuery.expr && jQuery.expr.filters ) { }; } +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; + + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; +}); + @@ -7144,7 +7283,7 @@ jQuery.extend({ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), global: true, type: "GET", - contentType: "application/x-www-form-urlencoded", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", processData: true, async: true, /* @@ -7470,7 +7609,7 @@ jQuery.extend({ // Apply prefilters inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - // If request was aborted inside a prefiler, stop there + // If request was aborted inside a prefilter, stop there if ( state === 2 ) { return false; } @@ -7643,11 +7782,11 @@ function buildParams( prefix, obj, traditional, add ) { // a server error. Possible fixes are to modify rack's // deserialization algorithm or to provide an option or flag // to force array serialization to be shallow. - buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add ); + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); } }); - } else if ( !traditional && obj != null && typeof obj === "object" ) { + } else if ( !traditional && jQuery.type( obj ) === "object" ) { // Serialize object item. for ( var name in obj ) { buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); @@ -7843,8 +7982,7 @@ jQuery.ajaxSetup({ // Detect, normalize options and install callbacks for jsonp requests jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - var inspectData = s.contentType === "application/x-www-form-urlencoded" && - ( typeof s.data === "string" ); + var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType ); if ( s.dataTypes[ 0 ] === "jsonp" || s.jsonp !== false && ( jsre.test( s.url ) || @@ -8145,7 +8283,13 @@ if ( jQuery.support.ajax ) { if ( xml && xml.documentElement /* #4958 */ ) { responses.xml = xml; } - responses.text = xhr.responseText; + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( _ ) { + } // Firefox throws an exception when accessing // statusText for faulty cross-domain requests @@ -8253,7 +8397,8 @@ jQuery.fn.extend({ // Set elements which have been overridden with display: none // in a stylesheet to whatever the default browser style is // for such an element - if ( display === "" && jQuery.css(elem, "display") === "none" ) { + if ( (display === "" && jQuery.css(elem, "display") === "none") || + !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) { jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) ); } } @@ -8357,24 +8502,37 @@ jQuery.fn.extend({ var opt = jQuery.extend( {}, optall ), isElement = this.nodeType === 1, hidden = isElement && jQuery(this).is(":hidden"), - name, val, p, e, + name, val, p, e, hooks, replace, parts, start, end, unit, method; // will store per property easing and be used to determine when an animation is complete opt.animatedProperties = {}; + // first pass over propertys to expand / normalize for ( p in prop ) { - - // property name normalization name = jQuery.camelCase( p ); if ( p !== name ) { prop[ name ] = prop[ p ]; delete prop[ p ]; } - val = prop[ name ]; + if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) { + replace = hooks.expand( prop[ name ] ); + delete prop[ name ]; + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'p' from above because we have the correct "name" + for ( p in replace ) { + if ( ! ( p in prop ) ) { + prop[ p ] = replace[ p ]; + } + } + } + } + + for ( name in prop ) { + val = prop[ name ]; // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) if ( jQuery.isArray( val ) ) { opt.animatedProperties[ name ] = val[ 1 ]; @@ -8601,11 +8759,11 @@ jQuery.extend({ }, easing: { - linear: function( p, n, firstNum, diff ) { - return firstNum + diff * p; + linear: function( p ) { + return p; }, - swing: function( p, n, firstNum, diff ) { - return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum; + swing: function( p ) { + return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5; } }, @@ -8663,8 +8821,12 @@ jQuery.fx.prototype = { t.queue = this.options.queue; t.elem = this.elem; t.saveState = function() { - if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) { - jQuery._data( self.elem, "fxshow" + self.prop, self.start ); + if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) { + if ( self.options.hide ) { + jQuery._data( self.elem, "fxshow" + self.prop, self.start ); + } else if ( self.options.show ) { + jQuery._data( self.elem, "fxshow" + self.prop, self.end ); + } } }; @@ -8831,12 +8993,14 @@ jQuery.extend( jQuery.fx, { } }); -// Adds width/height step functions -// Do not set anything below 0 -jQuery.each([ "width", "height" ], function( i, prop ) { - jQuery.fx.step[ prop ] = function( fx ) { - jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit ); - }; +// Ensure props that can't be negative don't go there on undershoot easing +jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) { + // exclude marginTop, marginLeft, marginBottom and marginRight from this list + if ( prop.indexOf( "margin" ) ) { + jQuery.fx.step[ prop ] = function( fx ) { + jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit ); + }; + } }); if ( jQuery.expr && jQuery.expr.filters ) { @@ -8873,7 +9037,7 @@ function defaultDisplay( nodeName ) { // document to it; WebKit & Firefox won't allow reusing the iframe document. if ( !iframeDoc || !iframe.createElement ) { iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; - iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" ); + iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" ); iframeDoc.close(); } @@ -8895,41 +9059,23 @@ function defaultDisplay( nodeName ) { -var rtable = /^t(?:able|d|h)$/i, +var getOffset, + rtable = /^t(?:able|d|h)$/i, rroot = /^(?:body|html)$/i; if ( "getBoundingClientRect" in document.documentElement ) { - jQuery.fn.offset = function( options ) { - var elem = this[0], box; - - if ( options ) { - return this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - if ( !elem || !elem.ownerDocument ) { - return null; - } - - if ( elem === elem.ownerDocument.body ) { - return jQuery.offset.bodyOffset( elem ); - } - + getOffset = function( elem, doc, docElem, box ) { try { box = elem.getBoundingClientRect(); } catch(e) {} - var doc = elem.ownerDocument, - docElem = doc.documentElement; - // Make sure we're not dealing with a disconnected DOM node if ( !box || !jQuery.contains( docElem, elem ) ) { return box ? { top: box.top, left: box.left } : { top: 0, left: 0 }; } var body = doc.body, - win = getWindow(doc), + win = getWindow( doc ), clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop, @@ -8941,28 +9087,10 @@ if ( "getBoundingClientRect" in document.documentElement ) { }; } else { - jQuery.fn.offset = function( options ) { - var elem = this[0]; - - if ( options ) { - return this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - if ( !elem || !elem.ownerDocument ) { - return null; - } - - if ( elem === elem.ownerDocument.body ) { - return jQuery.offset.bodyOffset( elem ); - } - + getOffset = function( elem, doc, docElem ) { var computedStyle, offsetParent = elem.offsetParent, prevOffsetParent = elem, - doc = elem.ownerDocument, - docElem = doc.documentElement, body = doc.body, defaultView = doc.defaultView, prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle, @@ -9013,6 +9141,29 @@ if ( "getBoundingClientRect" in document.documentElement ) { }; } +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var elem = this[0], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return null; + } + + if ( elem === doc.body ) { + return jQuery.offset.bodyOffset( elem ); + } + + return getOffset( elem, doc, doc.documentElement ); +}; + jQuery.offset = { bodyOffset: function( body ) { @@ -9118,42 +9269,30 @@ jQuery.fn.extend({ // Create scrollLeft and scrollTop methods -jQuery.each( ["Left", "Top"], function( i, name ) { - var method = "scroll" + name; +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); jQuery.fn[ method ] = function( val ) { - var elem, win; + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); - if ( val === undefined ) { - elem = this[ 0 ]; - - if ( !elem ) { - return null; + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + jQuery.support.boxModel && win.document.documentElement[ method ] || + win.document.body[ method ] : + elem[ method ]; } - win = getWindow( elem ); - - // Return the scroll offset - return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] : - jQuery.support.boxModel && win.document.documentElement[ method ] || - win.document.body[ method ] : - elem[ method ]; - } - - // Set the scroll offset - return this.each(function() { - win = getWindow( this ); - if ( win ) { win.scrollTo( - !i ? val : jQuery( win ).scrollLeft(), - i ? val : jQuery( win ).scrollTop() + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() ); } else { - this[ method ] = val; + elem[ method ] = val; } - }); + }, method, val, arguments.length, null ); }; }); @@ -9169,9 +9308,10 @@ function getWindow( elem ) { // Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods -jQuery.each([ "Height", "Width" ], function( i, name ) { - - var type = name.toLowerCase(); +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + var clientProp = "client" + name, + scrollProp = "scroll" + name, + offsetProp = "offset" + name; // innerHeight and innerWidth jQuery.fn[ "inner" + name ] = function() { @@ -9193,50 +9333,48 @@ jQuery.each([ "Height", "Width" ], function( i, name ) { null; }; - jQuery.fn[ type ] = function( size ) { - // Get window width or height - var elem = this[0]; - if ( !elem ) { - return size == null ? null : this; - } + jQuery.fn[ type ] = function( value ) { + return jQuery.access( this, function( elem, type, value ) { + var doc, docElemProp, orig, ret; - if ( jQuery.isFunction( size ) ) { - return this.each(function( i ) { - var self = jQuery( this ); - self[ type ]( size.call( this, i, self[ type ]() ) ); - }); - } + if ( jQuery.isWindow( elem ) ) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[ clientProp ]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[ clientProp ] || docElemProp; + } - if ( jQuery.isWindow( elem ) ) { - // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode - // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat - var docElemProp = elem.document.documentElement[ "client" + name ], - body = elem.document.body; - return elem.document.compatMode === "CSS1Compat" && docElemProp || - body && body[ "client" + name ] || docElemProp; - - // Get document width or height - } else if ( elem.nodeType === 9 ) { - // Either scroll[Width/Height] or offset[Width/Height], whichever is greater - return Math.max( - elem.documentElement["client" + name], - elem.body["scroll" + name], elem.documentElement["scroll" + name], - elem.body["offset" + name], elem.documentElement["offset" + name] - ); + // Get document width or height + if ( elem.nodeType === 9 ) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + doc = elem.documentElement; - // Get or set width or height on the element - } else if ( size === undefined ) { - var orig = jQuery.css( elem, type ), - ret = parseFloat( orig ); + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if ( doc[ clientProp ] >= doc[ scrollProp ] ) { + return doc[ clientProp ]; + } + + return Math.max( + elem.body[ scrollProp ], doc[ scrollProp ], + elem.body[ offsetProp ], doc[ offsetProp ] + ); + } - return jQuery.isNumeric( ret ) ? ret : orig; + // Get width or height on the element + if ( value === undefined ) { + orig = jQuery.css( elem, type ); + ret = parseFloat( orig ); + return jQuery.isNumeric( ret ) ? ret : orig; + } - // Set the width or height on the element (default to pixels if value is unitless) - } else { - return this.css( type, typeof size === "string" ? size : size + "px" ); - } + // Set the width or height on the element + jQuery( elem ).css( type, value ); + }, type, value, arguments.length, null ); }; - }); diff --git a/doc/html/about.html b/doc/html/about.html index c826518..8369eb1 100644 --- a/doc/html/about.html +++ b/doc/html/about.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>About S3QL — S3QL 1.11.1 documentation</title> + <title>About S3QL — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="#" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Installation" href="installation.html" /> <link rel="prev" title="S3QL User’s Guide" href="index.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="index.html" title="S3QL User’s Guide" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -187,7 +187,7 @@ will, although being inconvenient, not endanger any stored data.</p> <li class="right" > <a href="index.html" title="S3QL User’s Guide" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/adm.html b/doc/html/adm.html index 83f670c..ce73702 100644 --- a/doc/html/adm.html +++ b/doc/html/adm.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Managing File Systems — S3QL 1.11.1 documentation</title> + <title>Managing File Systems — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Mounting" href="mount.html" /> <link rel="prev" title="File System Creation" href="mkfs.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="mkfs.html" title="File System Creation" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -124,8 +124,8 @@ specified multiple times.</td></tr> <tr><td class="option-group"> <kbd><span class="option">--log <var><target></var></span></kbd></td> <td>Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: <tt class="docutils literal"><span class="pre">none</span></tt></td></tr> <tr><td class="option-group" colspan="2"> <kbd><span class="option">--authfile <var><path></var></span></kbd></td> @@ -218,7 +218,7 @@ for help on the mailing list first (see <a class="reference internal" href="reso <li class="right" > <a href="mkfs.html" title="File System Creation" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/authinfo.html b/doc/html/authinfo.html index f4b7a58..56c121b 100644 --- a/doc/html/authinfo.html +++ b/doc/html/authinfo.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Storing Authentication Information — S3QL 1.11.1 documentation</title> + <title>Storing Authentication Information — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Contributed Programs" href="contrib.html" /> <link rel="prev" title="Checking for Errors" href="fsck.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="fsck.html" title="Checking for Errors" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -165,7 +165,7 @@ module</a>.</p> <li class="right" > <a href="fsck.html" title="Checking for Errors" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/backends.html b/doc/html/backends.html index 9706bd8..87f73d4 100644 --- a/doc/html/backends.html +++ b/doc/html/backends.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Storage Backends — S3QL 1.11.1 documentation</title> + <title>Storage Backends — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Important Rules to Avoid Losing Data" href="durability.html" /> <link rel="prev" title="Installation" href="installation.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="installation.html" title="Installation" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -272,7 +272,7 @@ storage url <tt class="docutils literal"><span class="pre">local:///home/john/s3 <li class="right" > <a href="installation.html" title="Installation" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/contrib.html b/doc/html/contrib.html index 7819367..68a6978 100644 --- a/doc/html/contrib.html +++ b/doc/html/contrib.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Contributed Programs — S3QL 1.11.1 documentation</title> + <title>Contributed Programs — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Tips & Tricks" href="tips.html" /> <link rel="prev" title="Storing Authentication Information" href="authinfo.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="authinfo.html" title="Storing Authentication Information" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -231,7 +231,7 @@ start, and properly unmounts it when the system is shut down.</p> <li class="right" > <a href="authinfo.html" title="Storing Authentication Information" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/durability.html b/doc/html/durability.html index 1b5292f..733a5bc 100644 --- a/doc/html/durability.html +++ b/doc/html/durability.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Important Rules to Avoid Losing Data — S3QL 1.11.1 documentation</title> + <title>Important Rules to Avoid Losing Data — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="File System Creation" href="mkfs.html" /> <link rel="prev" title="Storage Backends" href="backends.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="backends.html" title="Storage Backends" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -343,7 +343,7 @@ over long periods of time.</p> <li class="right" > <a href="backends.html" title="Storage Backends" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/fsck.html b/doc/html/fsck.html index a0ce2af..33ed852 100644 --- a/doc/html/fsck.html +++ b/doc/html/fsck.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Checking for Errors — S3QL 1.11.1 documentation</title> + <title>Checking for Errors — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Storing Authentication Information" href="authinfo.html" /> <link rel="prev" title="Unmounting" href="umount.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="umount.html" title="Unmounting" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -105,8 +105,8 @@ or if you suspect that there might be errors, you should run the <tr><td class="option-group"> <kbd><span class="option">--log <var><target></var></span></kbd></td> <td>Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: <tt class="docutils literal"><span class="pre">~/.s3ql/fsck.log</span></tt></td></tr> <tr><td class="option-group" colspan="2"> <kbd><span class="option">--cachedir <var><path></var></span></kbd></td> @@ -161,7 +161,7 @@ option is not set.</td></tr> <li class="right" > <a href="umount.html" title="Unmounting" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/impl_details.html b/doc/html/impl_details.html index 4d85c47..defe552 100644 --- a/doc/html/impl_details.html +++ b/doc/html/impl_details.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Implementation Details — S3QL 1.11.1 documentation</title> + <title>Implementation Details — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="prev" title="Further Resources / Getting Help" href="resources.html" /> </head> <body> @@ -36,7 +36,7 @@ <li class="right" style="margin-right: 10px"> <a href="resources.html" title="Further Resources / Getting Help" accesskey="P">previous</a></li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -216,7 +216,7 @@ new S3 object.</p> <li class="right" style="margin-right: 10px"> <a href="resources.html" title="Further Resources / Getting Help" >previous</a></li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/index.html b/doc/html/index.html index d036122..db8dbd5 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>S3QL User’s Guide — S3QL 1.11.1 documentation</title> + <title>S3QL User’s Guide — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="#" /> + <link rel="top" title="S3QL 1.12 documentation" href="#" /> <link rel="next" title="About S3QL" href="about.html" /> </head> <body> @@ -36,7 +36,7 @@ <li class="right" style="margin-right: 10px"> <a href="about.html" title="About S3QL" accesskey="N">next</a></li> - <li><a href="#">S3QL 1.11.1 documentation</a> »</li> + <li><a href="#">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -196,7 +196,7 @@ <li class="right" style="margin-right: 10px"> <a href="about.html" title="About S3QL" >next</a></li> - <li><a href="#">S3QL 1.11.1 documentation</a> »</li> + <li><a href="#">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/installation.html b/doc/html/installation.html index 1345c4c..ba75f56 100644 --- a/doc/html/installation.html +++ b/doc/html/installation.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Installation — S3QL 1.11.1 documentation</title> + <title>Installation — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Storage Backends" href="backends.html" /> <link rel="prev" title="About S3QL" href="about.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="about.html" title="About S3QL" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -186,7 +186,7 @@ have to run <tt class="docutils literal"><span class="pre">sudo</span> <span cla <li class="right" > <a href="about.html" title="About S3QL" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/issues.html b/doc/html/issues.html index aabff7e..295a45c 100644 --- a/doc/html/issues.html +++ b/doc/html/issues.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Known Issues — S3QL 1.11.1 documentation</title> + <title>Known Issues — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Manpages" href="man/index.html" /> <link rel="prev" title="Tips & Tricks" href="tips.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="tips.html" title="Tips & Tricks" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -96,9 +96,9 @@ man-in-the-middle attack is principally possible. See <a class="reference extern details.</p> </li> <li><p class="first">S3QL is rather slow when an application tries to write data in -unreasonably small chunks. If a 1 MB file is copied in chunks of 1 +unreasonably small chunks. If a 1 MiB file is copied in chunks of 1 KB, this will take more than 10 times as long as when it’s copied -with the (recommended) chunk size of 128 KB.</p> +with the (recommended) chunk size of 128 KiB.</p> <p>This is a limitation of the FUSE library (which does not yet support write caching) which will hopefully be addressed in some future FUSE version.</p> @@ -167,7 +167,7 @@ the backend.</p> <li class="right" > <a href="tips.html" title="Tips & Tricks" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/man/adm.html b/doc/html/man/adm.html index 9d6a42e..d4f473d 100644 --- a/doc/html/man/adm.html +++ b/doc/html/man/adm.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The s3qladm command — S3QL 1.11.1 documentation</title> + <title>The s3qladm command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The mount.s3ql command" href="mount.html" /> <link rel="prev" title="The mkfs.s3ql command" href="mkfs.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="mkfs.html" title="The mkfs.s3ql command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -142,8 +142,8 @@ specified multiple times.</td></tr> <tr><td class="option-group"> <kbd><span class="option">--log <var><target></var></span></kbd></td> <td>Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: <tt class="docutils literal"><span class="pre">none</span></tt></td></tr> <tr><td class="option-group" colspan="2"> <kbd><span class="option">--authfile <var><path></var></span></kbd></td> @@ -212,7 +212,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="mkfs.html" title="The mkfs.s3ql command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/cp.html b/doc/html/man/cp.html index 198322c..9d9b966 100644 --- a/doc/html/man/cp.html +++ b/doc/html/man/cp.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The s3qlcp command — S3QL 1.11.1 documentation</title> + <title>The s3qlcp command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The s3qlrm command" href="rm.html" /> <link rel="prev" title="The s3qlctrl command" href="ctrl.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="ctrl.html" title="The s3qlctrl command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -212,7 +212,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="ctrl.html" title="The s3qlctrl command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/ctrl.html b/doc/html/man/ctrl.html index 41875b2..69bfbb8 100644 --- a/doc/html/man/ctrl.html +++ b/doc/html/man/ctrl.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The s3qlctrl command — S3QL 1.11.1 documentation</title> + <title>The s3qlctrl command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The s3qlcp command" href="cp.html" /> <link rel="prev" title="The s3qlstat command" href="stat.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="stat.html" title="The s3qlstat command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -132,7 +132,7 @@ removed in the future (see <a class="reference external" href="http://code.googl block while a snapshot of the metadata is prepared for upload.</dd> <dt>cachesize</dt> <dd><p class="first">Changes the cache size of the file system. This action requires an -additional argument that specifies the new cache size in kB, so the +additional argument that specifies the new cache size in KiB, so the complete command line is:</p> <div class="last highlight-commandline"><div class="highlight"><pre><span class="l">s3qlctrl </span><span class="ge">[options]</span><span class="l"> cachesize </span><span class="nv"><mountpoint></span><span class="l"> </span><span class="nv"><new-cache-size></span><span class="l"></span> </pre></div> @@ -203,7 +203,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="stat.html" title="The s3qlstat command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/expire_backups.html b/doc/html/man/expire_backups.html index c8f6f43..4e15b2c 100644 --- a/doc/html/man/expire_backups.html +++ b/doc/html/man/expire_backups.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The expire_backups command — S3QL 1.11.1 documentation</title> + <title>The expire_backups command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="Further Resources / Getting Help" href="../resources.html" /> <link rel="prev" title="The pcp command" href="pcp.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="pcp.html" title="The pcp command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -233,7 +233,7 @@ error occured.</p> <li class="right" > <a href="pcp.html" title="The pcp command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/fsck.html b/doc/html/man/fsck.html index f922930..4bc9d8f 100644 --- a/doc/html/man/fsck.html +++ b/doc/html/man/fsck.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The fsck.s3ql command — S3QL 1.11.1 documentation</title> + <title>The fsck.s3ql command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The pcp command" href="pcp.html" /> <link rel="prev" title="The umount.s3ql command" href="umount.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="umount.html" title="The umount.s3ql command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -131,8 +131,8 @@ available backends.</p> <tr><td class="option-group"> <kbd><span class="option">--log <var><target></var></span></kbd></td> <td>Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: <tt class="docutils literal"><span class="pre">~/.s3ql/fsck.log</span></tt></td></tr> <tr><td class="option-group" colspan="2"> <kbd><span class="option">--cachedir <var><path></var></span></kbd></td> @@ -200,7 +200,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="umount.html" title="The umount.s3ql command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/index.html b/doc/html/man/index.html index 3225f48..9c0354b 100644 --- a/doc/html/man/index.html +++ b/doc/html/man/index.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Manpages — S3QL 1.11.1 documentation</title> + <title>Manpages — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="next" title="The mkfs.s3ql command" href="mkfs.html" /> <link rel="prev" title="Known Issues" href="../issues.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="../issues.html" title="Known Issues" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -140,7 +140,7 @@ here in the User’s Guide.</p> <li class="right" > <a href="../issues.html" title="Known Issues" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/man/lock.html b/doc/html/man/lock.html index 79b929f..0358009 100644 --- a/doc/html/man/lock.html +++ b/doc/html/man/lock.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The s3qllock command — S3QL 1.11.1 documentation</title> + <title>The s3qllock command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The umount.s3ql command" href="umount.html" /> <link rel="prev" title="The s3qlrm command" href="rm.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="rm.html" title="The s3qlrm command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -203,7 +203,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="rm.html" title="The s3qlrm command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/mkfs.html b/doc/html/man/mkfs.html index d164700..f7aac4f 100644 --- a/doc/html/man/mkfs.html +++ b/doc/html/man/mkfs.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The mkfs.s3ql command — S3QL 1.11.1 documentation</title> + <title>The mkfs.s3ql command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The s3qladm command" href="adm.html" /> <link rel="prev" title="Manpages" href="index.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="index.html" title="Manpages" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -165,9 +165,9 @@ option is not set.</td></tr> <tr><td class="option-group" colspan="2"> <kbd><span class="option">--max-obj-size <var><size></var></span></kbd></td> </tr> -<tr><td> </td><td>Maximum size of storage objects in KB. Files bigger +<tr><td> </td><td>Maximum size of storage objects in KiB. Files bigger than this will be spread over multiple objects in the -storage backend. Default: 10240 KB.</td></tr> +storage backend. Default: 10240 KiB.</td></tr> <tr><td class="option-group"> <kbd><span class="option">--plain</span></kbd></td> <td>Create unencrypted file system.</td></tr> @@ -207,7 +207,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="index.html" title="Manpages" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/mount.html b/doc/html/man/mount.html index 773be71..23b3076 100644 --- a/doc/html/man/mount.html +++ b/doc/html/man/mount.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The mount.s3ql command — S3QL 1.11.1 documentation</title> + <title>The mount.s3ql command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The s3qlstat command" href="stat.html" /> <link rel="prev" title="The s3qladm command" href="adm.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="adm.html" title="The s3qladm command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -130,7 +130,7 @@ description of the available backends.</p> <tr><td class="option-group"> <kbd><span class="option">--log <var><target></var></span></kbd></td> <td>Write logging info into this file. File will be -rotated when it reaches 1 MB, and at most 5 old log +rotated when it reaches 1 MiB, and at most 5 old log files will be kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: <tt class="docutils literal"><span class="pre">~/.s3ql/mount.log</span></tt></td></tr> <tr><td class="option-group" colspan="2"> @@ -164,8 +164,8 @@ option is not set.</td></tr> <tr><td class="option-group" colspan="2"> <kbd><span class="option">--cachesize <var><size></var></span></kbd></td> </tr> -<tr><td> </td><td>Cache size in kb (default: 102400 (100 MB)). Should be -at least 10 times the maximum object size of the +<tr><td> </td><td>Cache size in KiB (default: 102400 (100 MiB)). Should +be at least 10 times the maximum object size of the filesystem, otherwise an object may be retrieved and written several times during a single write() or read() operation.</td></tr> @@ -178,13 +178,6 @@ you increase this number you have to make sure that your process file descriptor limit (as set with <tt class="docutils literal"><span class="pre">ulimit</span> <span class="pre">-n</span></tt>) is high enough (at least the number of cache entries + 100).</td></tr> -<tr><td class="option-group" colspan="2"> -<kbd><span class="option">--min-obj-size <var><size></var></span></kbd></td> -</tr> -<tr><td> </td><td>Minimum size of storage objects in KB. Files smaller -than this may be combined into groups that are stored -as single objects in the storage backend. Default: 512 -KB.</td></tr> <tr><td class="option-group"> <kbd><span class="option">--allow-other</span></kbd></td> <td>Normally, only the user who called <tt class="docutils literal"><span class="pre">mount.s3ql</span></tt> can @@ -265,7 +258,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="adm.html" title="The s3qladm command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/pcp.html b/doc/html/man/pcp.html index f00e519..8127b12 100644 --- a/doc/html/man/pcp.html +++ b/doc/html/man/pcp.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The pcp command — S3QL 1.11.1 documentation</title> + <title>The pcp command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The expire_backups command" href="expire_backups.html" /> <link rel="prev" title="The fsck.s3ql command" href="fsck.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="fsck.html" title="The fsck.s3ql command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -176,7 +176,7 @@ error occured.</p> <li class="right" > <a href="fsck.html" title="The fsck.s3ql command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/rm.html b/doc/html/man/rm.html index cb56faf..818d1a3 100644 --- a/doc/html/man/rm.html +++ b/doc/html/man/rm.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The s3qlrm command — S3QL 1.11.1 documentation</title> + <title>The s3qlrm command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The s3qllock command" href="lock.html" /> <link rel="prev" title="The s3qlcp command" href="cp.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="cp.html" title="The s3qlcp command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -176,7 +176,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="cp.html" title="The s3qlcp command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/stat.html b/doc/html/man/stat.html index ebfca95..269f602 100644 --- a/doc/html/man/stat.html +++ b/doc/html/man/stat.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The s3qlstat command — S3QL 1.11.1 documentation</title> + <title>The s3qlstat command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The s3qlctrl command" href="ctrl.html" /> <link rel="prev" title="The mount.s3ql command" href="mount.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="mount.html" title="The mount.s3ql command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -171,7 +171,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="mount.html" title="The mount.s3ql command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/man/umount.html b/doc/html/man/umount.html index 524c62f..3571d60 100644 --- a/doc/html/man/umount.html +++ b/doc/html/man/umount.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The umount.s3ql command — S3QL 1.11.1 documentation</title> + <title>The umount.s3ql command — S3QL 1.12 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="../index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="../index.html" /> <link rel="up" title="Manpages" href="index.html" /> <link rel="next" title="The fsck.s3ql command" href="fsck.html" /> <link rel="prev" title="The s3qllock command" href="lock.html" /> @@ -41,7 +41,7 @@ <li class="right" > <a href="lock.html" title="The s3qllock command" accesskey="P">previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" accesskey="U">Manpages</a> »</li> </ul> </div> @@ -181,7 +181,7 @@ system, common locations are <tt class="file docutils literal"><span class="pre" <li class="right" > <a href="lock.html" title="The s3qllock command" >previous</a> |</li> - <li><a href="../index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="../index.html">S3QL 1.12 documentation</a> »</li> <li><a href="index.html" >Manpages</a> »</li> </ul> </div> diff --git a/doc/html/mkfs.html b/doc/html/mkfs.html index c788c11..984395e 100644 --- a/doc/html/mkfs.html +++ b/doc/html/mkfs.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>File System Creation — S3QL 1.11.1 documentation</title> + <title>File System Creation — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Managing File Systems" href="adm.html" /> <link rel="prev" title="Important Rules to Avoid Losing Data" href="durability.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="durability.html" title="Important Rules to Avoid Losing Data" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -135,9 +135,9 @@ option is not set.</td></tr> <tr><td class="option-group" colspan="2"> <kbd><span class="option">--max-obj-size <var><size></var></span></kbd></td> </tr> -<tr><td> </td><td>Maximum size of storage objects in KB. Files bigger +<tr><td> </td><td>Maximum size of storage objects in KiB. Files bigger than this will be spread over multiple objects in the -storage backend. Default: 10240 KB.</td></tr> +storage backend. Default: 10240 KiB.</td></tr> <tr><td class="option-group"> <kbd><span class="option">--plain</span></kbd></td> <td>Create unencrypted file system.</td></tr> @@ -168,7 +168,7 @@ option to prevent accidental creation of an encrypted file system.</p> <li class="right" > <a href="durability.html" title="Important Rules to Avoid Losing Data" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/mount.html b/doc/html/mount.html index fc7dd04..1b5d0c3 100644 --- a/doc/html/mount.html +++ b/doc/html/mount.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Mounting — S3QL 1.11.1 documentation</title> + <title>Mounting — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Advanced S3QL Features" href="special.html" /> <link rel="prev" title="Managing File Systems" href="adm.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="adm.html" title="Managing File Systems" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -115,7 +115,7 @@ mounted on one computer at a time.</p> <tr><td class="option-group"> <kbd><span class="option">--log <var><target></var></span></kbd></td> <td>Write logging info into this file. File will be -rotated when it reaches 1 MB, and at most 5 old log +rotated when it reaches 1 MiB, and at most 5 old log files will be kept. Specify <tt class="docutils literal"><span class="pre">none</span></tt> to disable logging. Default: <tt class="docutils literal"><span class="pre">~/.s3ql/mount.log</span></tt></td></tr> <tr><td class="option-group" colspan="2"> @@ -149,8 +149,8 @@ option is not set.</td></tr> <tr><td class="option-group" colspan="2"> <kbd><span class="option">--cachesize <var><size></var></span></kbd></td> </tr> -<tr><td> </td><td>Cache size in kb (default: 102400 (100 MB)). Should be -at least 10 times the maximum object size of the +<tr><td> </td><td>Cache size in KiB (default: 102400 (100 MiB)). Should +be at least 10 times the maximum object size of the filesystem, otherwise an object may be retrieved and written several times during a single write() or read() operation.</td></tr> @@ -163,13 +163,6 @@ you increase this number you have to make sure that your process file descriptor limit (as set with <tt class="docutils literal"><span class="pre">ulimit</span> <span class="pre">-n</span></tt>) is high enough (at least the number of cache entries + 100).</td></tr> -<tr><td class="option-group" colspan="2"> -<kbd><span class="option">--min-obj-size <var><size></var></span></kbd></td> -</tr> -<tr><td> </td><td>Minimum size of storage objects in KB. Files smaller -than this may be combined into groups that are stored -as single objects in the storage backend. Default: 512 -KB.</td></tr> <tr><td class="option-group"> <kbd><span class="option">--allow-other</span></kbd></td> <td>Normally, only the user who called <tt class="docutils literal"><span class="pre">mount.s3ql</span></tt> can @@ -402,7 +395,7 @@ mounted.</li> <li class="right" > <a href="adm.html" title="Managing File Systems" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/objects.inv b/doc/html/objects.inv Binary files differindex c484b7e..1059f88 100644 --- a/doc/html/objects.inv +++ b/doc/html/objects.inv diff --git a/doc/html/resources.html b/doc/html/resources.html index 8a6b2da..f61734e 100644 --- a/doc/html/resources.html +++ b/doc/html/resources.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Further Resources / Getting Help — S3QL 1.11.1 documentation</title> + <title>Further Resources / Getting Help — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Implementation Details" href="impl_details.html" /> <link rel="prev" title="The expire_backups command" href="man/expire_backups.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="man/expire_backups.html" title="The expire_backups command" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -117,7 +117,7 @@ can subscribe by sending a mail to <li class="right" > <a href="man/expire_backups.html" title="The expire_backups command" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/search.html b/doc/html/search.html index 0cd7b18..74c8736 100644 --- a/doc/html/search.html +++ b/doc/html/search.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Search — S3QL 1.11.1 documentation</title> + <title>Search — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -27,7 +27,7 @@ <script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/searchtools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <script type="text/javascript"> jQuery(function() { Search.loadIndex("searchindex.js"); }); </script> @@ -38,7 +38,7 @@ <div class="related"> <h3>Navigation</h3> <ul> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -105,7 +105,7 @@ <div class="related"> <h3>Navigation</h3> <ul> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js index 7fb2047..923db9e 100644 --- a/doc/html/searchindex.js +++ b/doc/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({objects:{},terms:{suffici:1,all:[0,1,2,3,5,7,8,11,13,14,15,16,18,20,21,22,23,24,25,26,27,28,29],code:[8,18,0,24,11,25,10,27,23,3,4,28,6,21],partial:1,queri:1,global:[],mnt:[5,15,29],month:[5,27],secondli:1,prefix:[12,13],stumbl:14,notquitesecret:12,follow:[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,20,21,24,25,26,27,28,29],disk:[15,23,1],millisecond:22,whose:13,decid:15,middl:14,depend:[8,9,24,1,25,27,13,3,5,15,21,29],million:[],ulimit:[29,21],readabl:23,send:[29,22,17],rel:[13,4],init:[29,14],program:[0,2,3,4,5,6,7,8,9,10,11,14,16,18,20,21,24,25,26,27,28,29],those:[13,22],under:[13,24],aris:[],sha256:[23,22],neglig:[],worth:14,introduc:[18,7],sourc:[18,23,24,1,13,4,5,7],everi:[18,0,1,27,12,13,5,15,22,7],risk:[],mkf:[8,9,19,25,2,22],far:[15,1],nonc:22,subcommand:16,account:[21,13,29,22],util:[15,20],pycryptopp:24,failur:1,veri:[23,13,22,14,1],appar:13,tri:[16,22,14],administr:[0,7],level:[28,7],did:23,who:[11,29,21,22,26],cmd:[],list:[9,23,24,1,27,28,13,17,5,16,7],upload:[23,1,11,29,26,28,14,5,15,21,22,7],"try":[24,1,27,12,13,5],larg:[18,15,7,14],stderr:29,small:[15,22,14],blocksiz:[],mount:[18,9,0,21,19,1,11,29,10,26,28,13,7,3,5,6,15,16,22,14],dir:[18,29],pleas:[23,17],upper:1,smaller:[23,1,29,15,21,14],slower:[18,29,7],ifac:29,ten:13,whitespac:[],bucketnam:13,compens:1,sync:4,sign:13,consequ:1,hors:[0,7],design:[0,23,7,1],pass:[4,1],download:[16,24,22,3],further:[9,16,17],otherwis:[29,21,22],myusernam:29,port:13,append:22,rath:29,even:[8,0,21,1,11,25,26,20,2,13,3,16,29,7],what:[5,27,16,28,1],bzip2:[23,21,29],sub:[22,14],entir:[23,0,10,7,22],descriptor:[29,21],section:[12,13,22,1],abl:[0,1,11,26,13,7,17],invok:[28,16],asia:[],find:[0,29,7,14,1],access:[23,21,1,29,12,13,16,22,14],delet:[9,0,1,10,27,3,5,16,7],version:[0,1,2,3,4,6,14,8,10,11,16,18,20,21,22,23,24,25,26,27,28,29],suspect:20,consecut:13,"new":[8,0,21,1,25,29,27,28,5,16,22,7],net:[29,24],ever:1,"public":[],contrast:[0,7,1],metadata:[9,21,29,3,28,15,16,22,7],elimin:1,full:[8,18,0,1,11,25,10,28,23,3,5,6,21,29,7],themselv:12,absolut:[5,27,13],pacif:[],gener:[0,24,1,27,14,5,16,22,7],never:1,privat:[],here:[28,13,19],satisfi:24,explicitli:14,modif:14,address:14,path:[8,21,24,25,20,2,13,3,16,29],becom:[1,27,12,13,5,15,22],modifi:[18,23,22,7],sinc:[1,29,27,5,22,14],valu:[12,21,29,14],wait:[1,11,29,26,15,22,14],dry:27,convert:13,joes_bucket:[],ctr:22,checksum:[23,22],larger:1,step:5,precis:22,prior:1,amount:[28,15,13,23],throughput:[],pick:1,action:[28,16,7,3],opinion:13,implement:[9,22,1],magnitud:[18,7],chanc:1,obei:1,control:[13,7],fstab:[29,14],commun:13,appli:[12,15,1],modul:[8,21,24,25,20,2,12,13,3,28,16,29],cif:29,apw:24,filenam:15,unix:[23,15,22,14],api:13,visibl:1,marker:22,instal:[8,9,0,21,19,24,18,11,25,10,28,3,5,6,16],total:[29,7],establish:1,cloud:13,rackspacecloud:13,from:[8,18,0,21,24,1,25,23,20,27,2,12,13,29,3,4,5,15,16,22,7],describ:[13,1],would:[5,18,12,27,7],apswvers:24,usernam:12,upgrad:[9,16,3],implic:22,few:[5,24,1],live:13,concret:[],call:[18,0,1,29,10,27,28,5,6,15,21,7],usr:[8,18,0,11,25,10,28,3,5,6,21],recommend:[5,29,13,14],taken:[18,23,21,29,7],tape:[0,7],bill:12,type:[],until:[11,29,7,14,26],more:[23,24,1,14,4,28,22,7],sort:[5,27],desir:28,st_nlink:14,src:[18,7],peopl:13,hundr:[],relat:[],benchmark:[5,9,29],"19283712_yourname_s3ql":[],notic:[15,1],enhanc:5,warn:[28,16,10,13,7],sqlitelibvers:[],agent:13,sens:15,known:[9,23,13,14],obj:[2,25,21,29],compani:13,hold:13,unpack:24,cach:[8,9,23,21,25,29,20,2,14,3,28,16,22,7],must:[18,24,1,13,3,16,7],worst:[0,7],none:[8,21,1,29,20,3,16],word:[],sometim:16,hour:1,restor:[18,9,15,16,7],dest:18,setup:24,work:[23,24,1,26,27,5,15,22,14],uniqu:[12,13],dev:22,conceptu:23,remain:[29,22,1],wors:1,obvious:29,can:[0,1,2,3,5,6,7,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],learn:1,about:[9,23,1,29,13,6,15,22,7],root:[18,0,11,29,10,26,28,6,21,7],fetch:[18,22,7],overrid:1,claim:[13,1],sqlite:[24,22],prompt:[8,20],tar:15,give:[5,16,15,13,27],process:[1,11,29,26,4,5,15,21,14],lock:[0,7],sudo:24,share:[8,18,0,24,11,25,10,28,3,5,6,21,22],calcul:22,accept:[8,18,0,21,1,11,25,10,26,20,27,2,12,3,4,28,6,16,29],high:[23,1,29,13,4,21],critic:23,minimum:[15,21,29,23],want:[11,29,26,27,5,15,17],onlin:[0,13,23,7],unfortun:[15,13,14,1],occur:[8,18,0,1,11,25,10,27,3,4,28,6,21],ratio:29,concept:22,alwai:[8,18,21,1,25,29,20,27,2,13,7,3,5,16,22,14],cours:1,end:[29,16,22,1],turn:[5,27,29,14],rather:[1,27,14,5,15,7],anoth:1,ordinari:[18,11,26,7,1],write:[8,9,23,21,24,1,18,29,20,13,7,3,5,15,16,22,14],how:[5,27,15,22,1],manpag:[9,19],actual:[24,1,13,15,16,22],env:29,webpag:13,verifi:[13,14],simpl:[5,27,7],overwrit:[2,25],updat:[5,23,22,14,1],map:22,product:[],faq:17,resourc:[9,16,17],max:[2,25,21,29],earlier:[14,1],pyliblzma:24,reflect:22,badli:[16,3],wrong:[16,13,3],endang:23,mai:[18,0,21,24,1,29,17,23,26,28,13,7,3,5,15,16,14],multipl:[8,16,25,20,2,3,21,29],redund:[5,27,23,13,1],secondari:[],data:[8,9,23,21,1,18,11,25,29,26,20,2,13,7,3,5,28,15,16,22,14],grow:[23,29],physic:[5,18,0,16,7],man:[19,14],circumst:1,"short":[0,7],attempt:[8,29,14,1],practic:[15,13],third:15,neitheristhi:12,author:[29,14],favorit:[],apsw:24,element:29,issu:[18,9,0,24,29,17,10,23,13,7,28,6,14],inform:[9,1,29,27,12,13,28,21,22,7],maintain:29,combin:[15,13,29,21],allow:[8,18,0,21,25,10,20,27,2,13,29,3,4,5,6,15,16,28,7],enter:[2,25,22],exclus:15,volum:29,order:[18,12,7,1],talk:13,oper:[8,18,0,21,1,11,25,10,27,29,23,3,4,28,6,16,22],frontend:13,help:[9,24,17,28,13,14,3,5,16,7],east:[],over:[18,23,1,25,29,2,13,15,21,22,7],move:[23,16],soon:[],fifo:22,topsecret:[],increas:[1,29,13,15,21,22],affect:[18,29,7,14,1],effici:14,still:[18,23,1,11,29,26,22,7],dynam:[23,24],paramet:12,group:[29,21],s3qlctrl:[28,9,15,19,7],chosen:1,rogerbinn:24,fix:[0,1,27,14,5,7],inadvert:[18,7],better:[29,4,24,1],window:[9,1],html:22,restart:[29,14],persist:[],mail:[23,16,24,17],main:[10,7],might:[18,0,17,10,20,14,28,6,22,7],documents_januari:[18,7],them:[18,1,11,26,16,22,7],good:[0,27,14,5,15,7],synopsi:[8,18,0,11,25,10,27,3,4,28,6,21],thei:[18,0,19,23,27,5,15,22,7],python:[29,12,24,22],promin:14,safe:[18,15,7,1],fuse4bsd:24,dai:[5,27],initi:[],dat:[5,27],promis:1,terminolog:[],therebi:1,instead:[18,1,11,26,12,14,22,7],interrupt:16,potenti:1,now:[5,27,0,24,7],bigger:[2,25],choic:[24,1],term:[5,27],"__version__":24,somewher:[8,18,0,11,25,10,3,28,6,21,7],name:[18,25,29,27,2,12,13,5,15,21,22,7],joesdomain:[],crypto:22,authent:[8,9,21,25,20,2,12,13,3,16,29],easili:22,achiev:[18,23,1,29,5,7],exampl:[23,1,27,12,14,5,15,22,7],mode:[29,21,22,1],timeout:29,each:[29,27,12,5,21,22],debug:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,16,29],found:[12,15],beneath:7,confid:[],side:[],mean:[23,14,1],compil:29,just:[8,18,0,21,1,11,25,10,26,20,27,2,3,4,28,6,15,16,29,7],s3ql:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],due:[13,14],mkfifo:29,chunk:14,hard:[15,23,1],idea:[5,27,0,7,14],procedur:[18,22,7],realli:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,15,16,29,14],consum:1,contrib:[5,15,29],meta:[28,15,7],"static":24,significantli:[5,24,1],year:[5,27,23,13,1],s3_copi:[5,9],happen:[0,7,1],myfsdata:15,todo:[],special:[18,22,7],out:[23,13,14,1],lzma:[29,23,21,24,22],ftp:[],shown:13,network:[18,23,1,29,15,22,7],space:[18,23,7,14],open:[11,29,13,26],newli:1,utc:22,log_fifo:29,content:[18,23,1,29,0,22,7],cloudfil:[9,13,1],rise:1,suitabl:[23,24],rational:0,internet:[23,29],print:[8,18,0,21,24,11,25,10,26,20,27,2,3,4,28,6,16,29],eth0:29,bla:29,correct:[5,27],common:[8,18,0,11,25,10,3,28,6,21,7],foreground:[29,21],shut:[5,11,29,26,14],after:[18,0,1,23,13,15,16,7],insid:18,advanc:[9,7],migrat:5,documents_janurai:[],manipul:23,situat:[15,1],given:[22,14],free:[23,13],standard:[23,1,29,27,13,5,22],inod:22,reason:[10,1,29,26,20,27,13,14,5,15,7],base:29,theori:1,usual:[29,22],ask:[24,1,25,2,13,16,14],org:[29,22],"byte":[],likelihood:1,afterward:[15,22],bash:15,care:[18,23,7,14],sigkil:29,her:[0,7],thread:[5,29,21],befor:[18,23,1,11,29,26,13,14,22,7],could:[18,7],success:[],refus:[5,27],keep:[5,27,0,7,1],recov:[0,7],thing:[16,3],length:1,rais:[29,21],place:29,perman:[9,0,1,29,15,7],pycrypto:24,principl:29,confus:14,neglect:1,first:[23,24,1,29,12,13,15,16,22,14],origin:[],softwar:29,rang:[5,27],fs3:12,becaus:[18,23,1,29,5,22,7],directli:[13,22],malici:[0,7],carri:23,onc:[0,11,29,23,26,13,15,21,22,7],clariti:[],s3q:[],number:[23,24,1,29,27,14,4,5,15,21,22,7],capac:23,restrict:[28,29,21],date:[5,27],instruct:24,alreadi:[18,24,13,14,22,7],done:[29,22,1],wrapper:[5,4],llfuse:24,indistinguish:23,agre:22,miss:[27,1],s3c:13,size:[23,25,29,2,14,28,15,21,22,7],differ:[18,23,24,1,29,28,13,3,5,15,16,7],convent:14,script:[5,15,29,14],profil:[29,21],unknown:23,interact:3,s3qllock:[9,0,19,10,5,15,7],system:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29],least:[24,1,29,27,5,21,22],parallel:[5,15,21,29,4],checkpoint:1,attack:[0,7,14],necessarili:1,master:22,demonstr:5,statement:13,similarli:[],s3qlrm:[9,0,19,10,27,5,7],termin:[11,12,26,14],lost:[13,1],john:13,"final":[22,7],store:[8,9,23,21,1,25,29,20,27,2,12,13,3,5,15,16,22],low:[23,13],servi:[],luckili:[],consol:13,option:[0,1,2,3,4,5,6,7,8,10,11,14,15,16,18,20,21,24,25,26,27,28,29],especi:[15,13,23],shelf:[0,7],tool:13,copi:[18,9,23,1,14,4,5,15,16,22,7],inaccess:1,specifi:[8,21,25,29,20,27,2,12,13,3,5,28,16,22,14],arbitrari:[15,13],part:[23,29,27,4,5,22],pars:12,mostli:[],consult:[8,25,21,3],exactli:[5,18,27,7],haven:[],wide:[29,13,24],downright:13,target:[8,18,21,29,20,3,15,16,7],cachedir:[8,21,1,25,20,2,3,16,29],whenev:[29,12,24,15],prevent:[2,0,25,7,1],remov:[18,9,0,29,10,27,28,7,5,6,22,14],eleg:23,tree:[18,9,0,10,4,5,23,22,7],second:[1,29,27,12,5,15,21,22],structur:[23,16],charact:22,project:13,matter:[28,15,16],temporarili:29,friend:15,posit:22,video:29,minut:[5,27],led:12,typic:[18,7,1],pre:29,unencrypt:[2,25],sai:[18,7,1],comput:[23,1,29,27,5,22],entail:[],januari:[18,13,7],plaintext:[],explicit:15,ram:[],mind:1,argument:[28,16,3],correspond:13,"13th":23,packag:[5,24],expir:29,increment:[],disadvantag:[18,7],need:[18,21,24,1,29,27,13,5,16,22,7],seem:[15,13],exclud:[0,7],paramiko:[],caus:[13,1],engin:13,techniqu:1,equival:[5,27],min:[29,21],irrepar:16,destroi:[0,7],moreov:7,blindli:14,atim:14,accuraci:[5,27],note:[18,9,23,24,1,11,29,26,27,13,7,4,5,15,16,14],also:[0,1,3,4,5,6,7,8,10,11,12,13,15,18,19,21,22,23,24,25,26,27,28,29],builtin:[],denomin:[],take:[18,23,1,14,3,28,15,16,22,7],which:[18,10,24,1,23,27,12,14,5,22,7],discrep:[],transmit:[],environ:[13,24],uplink:5,singl:[15,21,29,1],swordfish:12,mktemp:29,begin:[12,22],sure:[21,24,29,13,15,16,22,14],importantli:[],distribut:[5,29,24,1],plenti:[],normal:[12,13,29,21],multipli:[],previou:[5,16],compress:[9,23,29,5,21,22,7],discov:1,most:[8,18,21,1,29,20,27,12,13,7,3,5,16,22,14],beta:23,said:1,rigor:[5,27],plan:[],strongest:[],stricli:[],choos:1,homepag:[8,18,0,11,25,10,3,28,6,21],"class":[8,18,0,11,25,10,27,28,3,4,5,6,21],independ:[23,21,29],tradit:1,simplic:23,renam:23,correctli:[14,20],ship:[27,29,4],url:[8,21,25,20,2,12,13,3,16,29],doc:[8,18,0,11,25,10,28,3,5,6,21,22],clear:[18,16,7],later:[18,0,13,7,14],cover:15,drive:[0,7],destruct:[0,7],doe:[23,1,29,26,13,22,14],declar:23,snapshot:[18,9,23,28,7],runtim:[9,7],determin:[5,29,22,1],sourceforg:[],occasion:13,region:[5,13,1],hmac:[23,22],gracefulli:[5,27],think:[],myawssecretaccesskei:[],theoret:15,show:27,carefulli:1,random:22,syntax:[29,20,2,28,16,7],connect:[8,23,21,25,29,20,2,13,3,15,16,22],session:22,permiss:[5,23,21,29],messageid:22,newest:[15,3],anywai:[],damag:[5,27,16,1],rotat:[8,16,29,20,3,21],redirect:29,current:[1,27,5,16,22,14],onli:[0,1,2,3,4,5,6,7,8,10,11,13,14,15,16,18,20,21,22,23,24,25,26,27,28,29],slow:14,locat:[8,18,0,1,11,25,10,3,28,6,21,7],launchpad:24,much:4,transact:23,configur:[9,29,7],activ:[8,18,0,21,11,25,10,26,20,27,2,12,13,3,4,28,6,16,29,7],state:[5,27,23,14],than:[10,1,25,29,27,2,13,7,5,15,21,22,14],authinfo:[],latenc:[15,23,4],suppos:1,rich:[],factor:[5,13,1],folder:[18,24,7],local:[8,9,0,24,1,18,11,25,10,13,29,23,3,28,6,15,21,22],defin:[5,27,12,29],overwritten:22,loss:[13,1],contribut:[5,9],variou:[28,16,3],get:[8,9,0,21,24,25,29,20,27,2,17,3,5,28,16,22,7],googlegroup:17,nasti:[0,7],stop:29,autom:[5,23],regularli:[18,7],ssl:[8,21,25,20,2,3,16,29,14],s3rr:[],cannot:[5,27,22,1],ssh:[9,15,13],chat:13,report:[23,13,24,17,1],reconstruct:[5,27],awai:1,requir:[8,23,24,1,29,20,27,28,5,21,22,14],myawsaccesskeyid:[],reveal:23,enabl:[29,21],held:22,dramat:[15,13],intrins:15,method:[29,24],provid:[23,24,1,29,13,22,14],bad:15,statist:[6,7,9],though:1,contain:[24,1,29,27,13,5,22],userspac:[],nowher:[],where:[28,16,3,1],caches:[28,29,21,7],wiki:[24,22,17],kernel:24,set:[8,21,25,20,2,3,5,15,16,29],bucket1:[],speak:[29,1],bucket3:[],bucket2:[],startup:29,packet:22,maximum:[1,25,29,2,5,21,22],tip:[9,15],see:[8,18,0,21,1,11,25,10,27,28,13,29,7,3,4,5,6,15,16,22,14],num:[29,21],s3qlcp:[5,9,18,19,7],respons:1,fail:[24,14,1],close:[11,26],optimum:15,whatsoev:[0,23,7],best:[15,13,24,29],concern:1,infinit:[23,1],awar:1,statu:[8,9,0,1,18,11,25,10,27,23,3,4,28,6,21,14],detect:[23,13,1],extend:23,inconveni:23,hopefulli:14,databas:[23,22],review:1,wikipedia:22,label:[2,25],favor:23,enough:[15,21,29,1],smallest:1,between:[5,27,29,21,1],"import":[5,9,13,24,1],neither:[0,7,1],earli:14,across:23,attribut:23,forward:1,check:[8,9,24,1,29,20,16,22,14],amazon:[9,23,1,13,5,22,14],august:[],kei:[23,13,22],weak:[],inconsist:14,extens:23,lazi:[11,26],hardlink:[18,23,7],joe:[5,12],expire_backup:[5,9,19,27],solv:15,advertis:13,come:[5,15,23,1],local0:29,addit:[18,10,1,29,23,3,28,16,22,7],both:[18,23,22,7,1],protect:[0,23,7],accident:[2,0,25,7],last:12,irregular:[5,27],southeast:[],someth:[18,7],howev:[18,0,1,29,23,27,13,14,5,15,22,7],alon:[],job:[5,29],against:[23,0,24,22,7],configpars:12,etc:[18,29,7,14],consi:[],instanc:15,freeli:29,corrupt:1,com:[8,18,0,24,11,25,10,27,13,3,4,28,6,15,21,22,17],pcp:[5,9,15,19,4],load:29,among:13,simpli:[0,7,1],technic:[13,1],figur:1,within:[12,7],inspir:[18,7],buti:[],period:[0,22,7,1],insist:15,batch:[8,29,20],written:[23,21,29,26,1],non:[],littl:[29,24,1],shutdown:29,linux:[23,24,29],averag:[13,1],respect:[13,1],guid:[8,9,19,25,3,21],assum:29,duplic:[18,9,23,1,13,5,22,7],quit:24,worthless:[0,7],strong:[8,18,0,11,25,10,27,3,4,28,6,21],nikolau:29,west:[],rackspac:[9,13,1],devic:[29,22],three:[29,13,24],been:[0,1,11,29,23,26,20,27,13,7,5,15,16,22,14],mark:[8,20,1],compon:23,secret:13,trigger:7,interpret:29,untouch:1,subscrib:17,monthli:[18,7],immedi:[10,1,11,29,26,22,7],hesit:1,strategi:[5,27],invis:22,legaci:13,infect:[0,7],upstart:[5,29,21],great:[0,7],ani:[8,18,0,24,1,25,23,27,2,13,17,5,22,7],rsync_arg:15,zero:[15,1],understand:[29,21],togeth:13,els:16,tradition:[0,7],s3qlstat:[6,19,7,9],c11:[],present:1,"case":[18,0,24,1,23,27,12,5,15,16,22,7],replic:[5,18,23,7,1],trojan:[0,7],ident:[18,23,22,7,1],look:[15,1],gnu:14,solid:23,plain:[2,25],servic:[23,13,1],zlib:[29,21],histor:[],trick:[9,15],documents_februari:[18,7],weren:17,abov:[5,27,13,1],error:[8,9,0,1,18,11,25,10,20,27,23,3,4,28,6,21,14],login:[12,13],invoc:[5,27,1],ahax:4,loos:1,jibbadup:[],propag:22,runlevel:29,argpars:[],have:[0,1,2,4,5,7,11,12,13,14,15,16,17,18,21,22,23,24,25,26,27,29],advantag:[5,27,0,7],stdout:29,almost:15,mtime:14,therefor:[5,29,13,14,1],remount:[],worri:[],destin:[18,15,7,4],archiv:[23,13,24],gsutil:[],conf:[5,9],incom:[],revis:[16,3],dedic:[29,14],sever:[23,24,1,29,13,4,5,15,21,22],tamper:[5,27],unmount:[9,1,11,29,26,20,3,5,15,16,22,14],develop:[9,23,13,24,22],minim:23,receiv:1,media:13,make:[18,0,21,24,29,23,27,13,14,5,15,16,22,7],flushcach:[28,7],same:[18,1,29,27,13,5,15,16,22,7],"while":[23,24,1,29,0,26,28,22,7],shorter:[],read:[8,18,23,21,1,25,29,20,2,12,13,3,15,16,22,7],renumb:[],unexpectedli:14,split:[23,22],auto:[29,21],pai:13,eventu:[9,22,1],infer:[5,27],higher:1,week:[5,27],geograph:[13,1],raid:1,hostnam:13,closest:13,lie:18,optim:[29,21],keyr:[],confidenti:[],upon:14,effect:[18,23,7,1],cycl:[5,27],hand:13,remot:[8,23,21,25,20,2,13,3,15,16,29],amazonwebservic:22,fuse:[29,14],temporari:1,user:[0,1,3,6,7,8,9,10,11,13,15,18,19,20,21,22,23,24,25,26,28,29],mani:[5,27,23,13,1],extern:[0,13,7],encrypt:[8,9,23,21,25,29,20,2,12,3,16,22],aka:22,recent:[29,27,5,16,22,14],lower:1,appropri:29,kept:[8,21,1,29,20,3,16],scenario:1,older:16,firstli:1,entri:[12,21,29],thu:1,irrelev:[],well:[0,21,1,29,10,27,12,5,16,7],without:[8,18,0,1,23,20,14,15,16,7],command:[0,2,3,4,5,6,7,8,9,10,11,12,14,16,18,19,20,21,24,25,26,27,28,29],expens:1,thi:[0,1,2,3,4,5,6,7,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29],filesystem:[25,29,20,2,15,21,22],gzip:23,credenti:[8,21,25,20,2,12,3,16,29],spend:15,ubuntu:24,left:[14,1],compromis:15,identifi:13,execut:[5,16,24,7],less:13,conform:23,complet:[18,1,29,27,28,5,21,7],lowest:[],obtain:[],rest:[15,22,1],indic:[],front:22,bandwidth:[5,23],kill:29,spread:[2,25,1],heavili:13,touch:[18,7],openstack:[9,23,13],storage_url:29,roughli:29,speed:[5,29],yet:[22,14,1],web:[13,1],viru:[0,7],detach:[11,26],homedir:[],easi:15,hint:[28,16,3],qualiti:13,point:[23,1,11,29,13,21,22],had:[5,18,27,7],except:[12,1],param:16,thousand:[29,13],gss:[],add:[0,7],valid:7,nor:[0,7],versa:[18,7],input:[8,20],logger:29,subsequ:[5,27,13],match:[13,1],build:24,bin:[15,24,29],applic:[12,13,22,14],transpar:23,preserv:[5,23],big:[15,14],regard:[18,7],exception:[],built:[],traffic:13,know:[5,18,27,7,1],background:[11,22,26],amp:15,bit:[23,22],password:[2,12,13,25],recurs:[5,9,10,7],presum:1,like:[18,0,1,29,23,14,4,21,22,7],insert:22,daemon:[29,21],swift:[9,13],ctime:14,specif:[0,24,13,14,28,16,7],header:[12,24],should:[8,18,0,21,24,1,11,25,10,26,20,13,7,3,28,6,15,16,29,14],outag:1,anyth:1,manual:[11,24,26,17],resolv:[17,1],noth:[0,7],princip:14,necessari:[16,22],either:[1,14,3,28,16,7],lose:[9,13,1],output:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,16,29],per:29,page:[13,19,1],yyyi:[5,27],imagin:[5,27,0,7],www:22,right:[15,1],old:[8,0,21,1,29,20,27,3,5,16,7],often:[15,13,1],deal:[],ll23bi:12,acknowledg:13,interv:[5,27,15,21,29],compat:[9,13],some:[0,1,3,4,5,6,14,8,10,11,13,18,20,21,22,23,24,25,26,27,28,29],umount:[9,19,11,29,26,14],self:24,certain:[],intern:[13,22,1],"export":[29,21],unchang:22,flush:[29,7],guarante:[5,27,13,1],server:[8,21,25,20,2,13,3,15,16,29,14],fanat:13,librari:[24,22,14],"24h":[29,21],rsync:[18,0,14,4,5,15,7],confirm:[10,7],stronger:[],freebsd:[23,24],avoid:[5,9,13,27,1],exec:29,definit:[5,27],februari:[18,7],protocol:13,backward:[],buffer:14,equal:29,exit:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,16,29],slash:13,peculiar:[13,1],auth:13,backend:[8,9,21,1,18,11,25,29,26,20,2,12,13,7,3,28,15,16,22,14],creep:23,refer:[19,1],machin:[],core:[5,1],plu:[],object:[1,25,29,2,13,21,22],run:[0,21,24,1,29,23,20,27,28,14,3,5,16,7],itself:[24,1],power:5,certif:[13,14],reach:[8,16,29,20,3,21,22],intellig:[5,27,23],view:19,usag:[5,18,27,7],symlink:23,solut:5,broken:1,host:13,nutshel:[9,1],unreason:14,although:[23,10,7,14],boundari:[5,27],bi23ll:12,immut:[9,0,10,5,23,15,7],impos:[],panel:13,sshf:[15,13],comparison:[],deflat:23,rare:[],socket:22,proce:24,memori:[],http:[8,18,0,24,11,25,10,27,13,3,4,28,6,21,22],storebackup:[18,7],acl:23,degre:1,messag:[8,16,25,29,20,2,3,21,22],fals:[29,21],bz2:22,backup:[18,9,0,1,29,23,27,13,3,5,15,16,7],disabl:[8,16,29,20,3,21],block:[23,1,11,29,26,14,28,22,7],repair:8,client:[],own:14,real:1,encount:[17,14],xyz:[],"float":22,encod:29,bound:1,automat:[8,9,21,1,25,29,20,2,13,3,5,16,22],two:[18,23,1,16,22,7],down:[5,11,29,26,14],nevertheless:[5,1],explain:1,ahv:15,authinfo2:[8,16,25,20,2,3,21,29],ensur:[5,27,15,23,1],chang:[18,9,0,1,29,23,14,3,28,16,22,7],insuffici:14,storag:[8,9,0,21,1,18,11,25,23,20,2,12,13,29,7,3,5,16,22,14],your:[8,18,0,19,24,1,11,25,10,27,28,13,7,3,5,6,15,21,29,14],durabl:[9,13,1],manag:[9,13,16],jspa:22,https_proxi:13,fast:[9,23,29,22,7],fusermount:[11,26,14],prepar:28,wai:[23,1,29,0,14,15,7],transfer:[5,15,23],support:[18,23,1,29,13,14,7],document:[8,18,0,11,25,10,3,28,6,21,7],question:17,s3_backup:[5,9],"long":[5,27,15,14,1],custom:13,avail:[8,0,21,25,29,27,14,3,5,16,22,7],start:[24,29,12,4,5,15],reli:[14,1],quiet:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,16,29],includ:[23,19,1,13,24,22,14],lot:15,suit:13,"var":13,perform:[9,23,24,1,29,28,13,3,4,5,15,16,14],succeed:[8,18,0,11,25,10,27,3,4,28,6,21],individu:[29,21,22,4],stage:[],"function":[16,22],properli:5,tracker:[23,24,17],interest:[22,7],form:[5,27,13,1],offer:[18,13,7,1],forc:[8,2,25,20],handl:[18,9,23,1,29,27,14,5,15,22,7],basic:[],continu:26,sigstop:[29,21],satur:29,measur:[5,1],newer:[24,1],don:[29,21],line:[28,23],mitig:1,bug:[23,24,17,14],faster:[10,7],info:[8,16,29,20,3,28,21],concaten:22,made:[18,0,1,23,15,22,7],furthermor:[12,23],consist:[9,12,13,22,1],possibl:[0,24,1,29,23,13,14,15,16,7],"default":[8,21,25,20,27,2,3,4,5,16,29],commit:[22,14],bucket:[5,12,13],displai:[],tell:[5,27,29],asynchron:23,authfil:[8,21,25,20,2,12,3,16,29],below:[13,7,1],limit:[18,0,29,10,28,14,5,6,21,7],s3ql_upstart:[5,9],unnot:13,problem:[8,18,0,1,17,23,27,14,5,15,22,7],similar:29,creation:[2,25,9],expect:[29,13,1],passphras:[9,12,13,3,16,22],featur:[18,9,0,1,23,13,7],hash:22,creat:[18,0,21,1,25,10,27,2,13,29,5,23,16,22,7],classic:[],retriev:[1,29,4,15,21,22],dure:[21,16,29],day_hour:[5,27],stabl:23,doesn:1,sale:13,strongli:[5,27],workaround:15,decreas:4,file:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,21,22,23,25,26,27,28,29],home:[5,15,13],request:1,exist:[18,0,1,25,10,27,2,13,5,22,7],improv:[5,9,15,4],mybucket:[],dd_hh:[5,27],link:[13,24,22],probabl:[23,1,27,5,15,16,7],http_proxi:13,again:[0,26,22,7,1],readi:[],relatim:14,umask:29,googl:[8,9,0,24,1,18,11,25,10,27,13,23,3,4,28,6,21,14],fs1:12,sequenti:[],when:[8,0,21,1,25,23,20,27,2,12,13,29,7,3,4,5,15,16,22,14],detail:[9,1,13,5,15,22,14],prepend:13,prais:13,field:[],fs2:12,other:[18,0,24,1,29,10,23,13,17,28,6,21,22,7],futur:[18,0,1,10,14,28,6,7],rememb:[],test:[23,24],you:[18,0,21,24,1,11,25,17,10,26,20,27,2,13,7,5,15,16,29,14],shrink:23,rid:[0,7],particular:[],variabl:[13,24],incompet:13,intend:[],clean:[8,22,20],fulli:1,mountpoint:[29,26,13,28,6,15,21,22,7],why:13,"return":[8,18,0,1,11,25,10,26,27,3,4,28,6,21,14],fsck:[8,9,19,1,29,20,13,16],briefli:[],releas:23,track:[5,27],log:[8,21,29,20,12,13,3,28,16,7],consid:[12,17,1],sql:26,decrypt:12,noleaf:14,unless:[2,0,25,7],ppa:24,pool:[],stai:[29,21],reduc:[5,13,1],outdat:1,infrequ:[],leav:14,longer:[23,0,26,27,14,5,16,7],algorithm:[9,23,29,5,21,22],vice:[18,7],directori:[0,1,2,3,4,5,7,8,10,11,13,14,15,16,18,20,21,22,23,24,25,27,29],reliabl:[13,1],cryptopp:22,descript:[8,18,0,11,25,10,27,3,4,28,6,15,21,29],save:[27,15,23,1],rule:[9,15,13,1],sftp:[],depth:[],ignor:[],fact:13,back:[0,13,7],time:[8,0,21,1,25,23,20,27,2,13,29,7,3,5,15,16,22,14],invari:22,s3qladm:[9,16,19,3,1],daili:[]},objtypes:{},titles:["The <strong class=\"program\">s3qllock</strong> command","Important Rules to Avoid Losing Data","File System Creation","The <strong class=\"program\">s3qladm</strong> command","The <strong class=\"program\">pcp</strong> command","Contributed Programs","The <strong class=\"program\">s3qlstat</strong> command","Advanced S3QL Features","The <strong class=\"program\">fsck.s3ql</strong> command","S3QL User’s Guide","The <strong class=\"program\">s3qlrm</strong> command","The <strong class=\"program\">umount.s3ql</strong> command","Storing Authentication Information","Storage Backends","Known Issues","Tips & Tricks","Managing File Systems","Further Resources / Getting Help","The <strong class=\"program\">s3qlcp</strong> command","Manpages","Checking for Errors","The <strong class=\"program\">mount.s3ql</strong> command","Implementation Details","About S3QL","Installation","The <strong class=\"program\">mkfs.s3ql</strong> command","Unmounting","The <strong class=\"program\">expire_backups</strong> command","The <strong class=\"program\">s3qlctrl</strong> command","Mounting"],objnames:{},filenames:["man/lock","durability","mkfs","man/adm","man/pcp","contrib","man/stat","special","man/fsck","index","man/rm","man/umount","authinfo","backends","issues","tips","adm","resources","man/cp","man/index","fsck","man/mount","impl_details","about","installation","man/mkfs","umount","man/expire_backups","man/ctrl","mount"]})
\ No newline at end of file +Search.setIndex({objects:{},terms:{all:[0,1,2,3,5,7,8,11,13,14,15,16,18,20,21,22,23,24,25,26,27,28,29],code:[8,18,0,24,11,25,10,27,23,3,4,28,6,21],partial:1,queri:1,global:[],mnt:[5,15,29],month:[5,27],secondli:1,prefix:[12,13],stumbl:7,notquitesecret:12,follow:[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,20,21,24,25,26,27,28,29],disk:[15,23,1],intrins:15,locat:[8,18,0,1,11,25,10,3,28,6,21,14],millisecond:22,whose:13,decid:15,middl:7,depend:[8,9,24,1,25,27,13,3,5,15,21,29],system:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29],ulimit:[29,21],readabl:23,specif:[0,24,13,14,28,16,7],send:[29,22,17],init:[29,7],program:[0,2,3,4,5,6,7,8,9,10,11,14,16,18,20,21,24,25,26,27,28,29],present:1,under:[13,24],aris:[],sha256:[23,22],neglig:[],worth:7,introduc:[18,14],sourc:[18,23,24,1,13,4,5,14],everi:[18,0,1,27,12,13,5,15,22,14],risk:[],far:[15,1],nonc:22,subcommand:16,account:[21,13,29,22],util:[15,20],volum:29,failur:1,veri:[23,13,22,7,1],appar:13,documents_januari:[18,14],administr:[0,14],level:[28,14],did:23,cmd:[],list:[9,23,24,1,27,28,13,17,5,16,14],upload:[23,1,11,29,26,28,14,5,15,21,22,7],"try":[24,1,27,12,13,5],stderr:29,small:[15,22,7],refer:[19,1],servic:[23,13,1],dir:[18,29],pleas:[23,17],upper:1,review:1,smaller:[15,23,7,1],slower:[18,29,14],ifac:29,ten:13,client:[],messageid:22,compens:1,sync:4,sign:13,consequ:1,hors:[0,14],design:[0,23,14,1],pass:[4,1],download:[16,24,22,3],further:[9,16,17],myusernam:29,port:13,append:22,rath:29,even:[8,0,21,1,11,25,26,20,2,13,3,16,29,14],subsequ:[5,27,13],what:[5,27,16,28,1],bzip2:[23,21,29],sub:[22,7],descriptor:[29,21],preserv:[5,23],section:[12,13,22,1],abl:[0,1,11,26,13,14,17],invok:[28,16],asia:[],anywai:[],access:[23,21,1,29,12,13,16,22,7],delet:[9,0,1,10,27,3,5,16,14],version:[0,1,2,3,4,6,7,8,10,11,16,18,20,21,22,23,24,25,26,27,28,29],suspect:20,consecut:13,"new":[8,0,21,1,25,29,27,28,5,16,22,14],net:[29,24],significantli:[5,24,1],ever:1,"public":[],contrast:[0,14,1],metadata:[9,21,29,3,28,15,16,22,14],elimin:1,full:[8,18,0,1,11,25,10,28,23,3,5,6,21,29,14],themselv:12,pacif:[],gener:[0,24,1,27,14,5,16,22,7],never:1,privat:[],here:[28,13,19],satisfi:24,slow:7,modif:7,address:7,path:[8,21,24,25,20,2,13,3,16,29],becom:[1,27,12,13,5,15,22],modifi:[18,23,22,14],sinc:[1,29,27,5,22,7],valu:[12,21,29,7],wait:[1,11,29,26,15,22,7],dry:27,convert:13,invari:22,joes_bucket:[],ctr:22,checksum:[23,22],larger:1,host:13,loos:1,precis:22,prior:1,amount:[28,15,13,23],throughput:[],pick:1,action:[28,16,14,3],opinion:13,implement:[9,22,1],magnitud:[18,14],chanc:1,unreason:7,control:[13,14],configur:[9,29,14],retriev:[1,29,4,15,21,22],appli:[12,15,1],modul:[8,21,24,25,20,2,12,13,3,28,16,29],furthermor:[12,23],apw:24,filenam:15,unix:[23,15,22,7],api:13,visibl:1,marker:22,instal:[8,9,0,21,19,24,18,11,25,10,28,3,5,6,16],total:[29,14],establish:1,cloud:13,kei:[23,13,22],rackspacecloud:13,from:[8,18,0,21,24,1,25,23,20,27,2,12,13,29,3,4,5,15,16,22,14],describ:[13,1],would:[5,18,12,27,14],apswvers:24,"float":22,usernam:12,upgrad:[9,16,3],implic:22,few:[5,24,1],live:13,concret:[],call:[18,0,1,29,10,27,28,5,6,15,21,14],usr:[8,18,0,11,25,10,28,3,5,6,21],recommend:[5,29,13,7],taken:[18,23,21,29,14],suppos:1,weren:17,type:[],until:[11,29,7,14,26],more:[23,24,1,14,4,28,22,7],sort:[5,27],exit:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,16,29],desir:28,st_nlink:7,comparison:[],peopl:13,hundr:[],relat:[],benchmark:[5,9,29],deflat:23,notic:[15,1],enhanc:5,warn:[28,16,10,13,14],sqlitelibvers:[],depth:[],extens:23,agent:13,sens:15,known:[9,23,13,7],actual:[24,1,13,15,16,22],compani:13,hold:13,unpack:24,cach:[8,9,23,21,25,29,20,2,14,3,28,16,22,7],must:[18,24,1,13,3,16,14],worst:[0,14],none:[8,21,1,29,20,3,16],word:[],hour:1,restor:[18,9,15,16,14],setup:24,work:[23,24,1,26,27,5,15,22,7],uniqu:[12,13],dev:22,conceptu:23,remain:[29,22,1],wors:1,obvious:29,can:[0,1,2,3,5,6,7,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],learn:1,field:[],root:[18,0,11,29,10,26,28,6,21,14],fetch:[18,22,14],overrid:1,claim:[13,1],sqlite:[24,22],prompt:[8,20],tar:15,give:[5,16,15,13,27],process:[1,11,29,26,4,5,15,21,7],lock:[0,14],sudo:24,share:[8,18,0,24,11,25,10,28,3,5,6,21,22],accept:[8,18,0,21,1,11,25,10,26,20,27,2,12,3,4,28,6,16,29],high:[23,1,29,13,4,21],critic:23,minimum:[15,23],want:[11,29,26,27,5,15,17],onlin:[0,13,23,14],acl:23,occur:[8,18,0,1,11,25,10,27,3,4,28,6,21],concept:22,alwai:[8,18,21,1,25,29,20,27,2,13,7,3,5,16,22,14],cours:1,end:[29,16,22,1],manipul:23,thing:[16,3],rather:[1,27,14,5,15,7],anoth:1,ordinari:[18,11,26,14,1],write:[8,9,23,21,24,1,18,29,20,13,7,3,5,15,16,22,14],how:[5,27,15,22,1],env:29,instead:[18,1,11,26,12,14,22,7],simpl:[5,27,14],updat:[5,23,22,7,1],map:22,product:[],faq:17,resourc:[9,16,17],max:[2,25,21,29],earlier:[7,1],pyliblzma:24,reflect:22,badli:[16,3],wrong:[16,13,3],endang:23,mai:[18,0,21,24,1,29,17,23,26,28,13,7,3,5,15,16,14],multipl:[8,16,25,20,2,3,21,29],redund:[5,27,23,13,1],autom:[5,23],data:[8,9,23,21,1,18,11,25,29,26,20,2,13,7,3,5,28,15,16,22,14],grow:[23,29],physic:[5,18,0,16,14],man:[19,7],memori:[],circumst:1,"short":[0,14],attempt:[8,29,7,1],practic:[15,13],third:15,read:[8,18,23,21,1,25,29,20,2,12,13,3,15,16,22,14],neitheristhi:12,minim:23,favorit:[],apsw:24,element:29,issu:[18,9,0,24,29,17,10,23,13,7,28,6,14],inform:[9,1,29,27,12,13,28,21,22,14],maintain:29,combin:[15,13],allow:[8,18,0,21,25,10,20,27,2,13,29,3,4,5,6,15,16,28,14],enter:[2,25,22],exclus:15,pycryptopp:24,algorithm:[9,23,29,5,21,22],order:[18,12,14,1],talk:13,origin:[],obj:[2,25],frontend:13,help:[9,24,17,28,13,14,3,5,16,7],repair:8,over:[18,23,1,25,29,2,13,15,21,22,14],move:[23,16],soon:[],fifo:22,topsecret:[],report:[23,13,24,17,1],affect:[18,29,7,14,1],effici:7,still:[18,23,1,11,29,26,22,14],dynam:[23,24],paramet:12,group:[],concaten:22,chosen:1,fix:[0,1,27,14,5,7],inadvert:[18,14],better:[29,4,24,1],window:[9,1],renumb:[],requir:[8,23,24,1,29,20,27,28,5,21,22,7],persist:[],bin:[15,24,29],mail:[23,16,24,17],main:[10,14],might:[18,0,17,10,20,14,28,6,22,7],split:[23,22],tri:[16,22,7],them:[18,1,11,26,16,22,14],good:[0,27,14,5,15,7],synopsi:[8,18,0,11,25,10,27,3,4,28,6,21],thei:[18,0,19,23,27,5,15,22,14],python:[29,12,24,22],promin:7,safe:[18,15,14,1],fuse4bsd:24,dai:[5,27],initi:[],dat:[5,27],instanc:15,promis:1,automat:[8,9,21,1,25,29,20,2,13,3,5,16,22],therebi:1,verifi:[13,7],interrupt:16,aka:22,now:[5,27,0,24,14],bigger:[2,25],choic:[24,1],term:[5,27],eventu:[9,22,1],somewher:[8,18,0,11,25,10,3,28,6,21,14],name:[18,25,29,27,2,12,13,5,15,21,22,14],hardlink:[18,23,14],joesdomain:[],crypto:22,authent:[8,9,21,25,20,2,12,13,3,16,29],easili:22,achiev:[18,23,1,29,5,14],mode:[29,21,22,1],timeout:29,each:[29,27,12,5,21,22],debug:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,16,29],found:[12,15],beneath:14,confid:[],side:[],mean:[23,7,1],compil:29,s3ql:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],reliabl:[13,1],mkfifo:29,chunk:7,hard:[15,23,1],idea:[5,27,0,7,14],procedur:[18,22,14],realli:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,15,16,29,7],consum:1,ensur:[5,27,15,23,1],meta:[28,15,14],"static":24,expect:[29,13,1],year:[5,27,23,13,1],s3_copi:[5,9],happen:[0,14,1],todo:[],special:[18,22,14],out:[23,13,7,1],lzma:[29,23,21,24,22],ftp:[],shown:13,encrypt:[8,9,23,21,25,29,20,2,12,3,16,22],network:[18,23,1,29,15,22,14],space:[18,23,7,14],miss:[27,1],newli:1,rational:0,content:[18,23,1,29,0,22,14],method:[29,24],suitabl:[23,24],rel:[13,4],internet:[23,29],print:[8,18,0,21,24,11,25,10,26,20,27,2,3,4,28,6,16,29],current:[1,27,5,16,22,7],eth0:29,bla:29,correct:[5,27],statist:[6,14,9],foreground:[29,21],shut:[5,11,29,26,7],after:[18,0,1,23,13,15,16,14],insid:18,advanc:[9,14],migrat:5,documents_janurai:[],million:[],situat:[15,1],differ:[18,23,24,1,29,28,13,3,5,15,16,14],free:[23,13],standard:[23,1,29,27,13,5,22],inod:22,reason:[10,1,29,26,20,27,13,14,5,15,7],base:29,theori:1,ask:[24,1,25,2,13,16,7],org:[29,22],"byte":[],likelihood:1,afterward:[15,22],bash:15,care:[18,23,7,14],sigkil:29,wai:[23,1,29,0,14,15,7],thread:[5,29,21],befor:[18,23,1,11,29,26,13,14,22,7],could:[18,14],refus:[5,27],keep:[5,27,0,14,1],recov:[0,14],turn:[5,27,29,7],length:1,fuse:[29,7],place:29,perman:[9,0,1,29,15,14],url:[8,21,25,20,2,12,13,3,16,29],principl:29,confus:7,neglect:1,first:[23,24,1,29,12,13,15,16,22,7],oper:[8,18,0,21,1,11,25,10,27,29,23,3,4,28,6,16,22],softwar:29,rang:[5,27],directli:[13,22],malici:[0,14],carri:23,onc:[0,11,29,23,26,13,15,21,22,14],clariti:[],s3q:[],number:[23,24,1,29,27,14,4,5,15,21,22,7],capac:23,restrict:[28,29,21],date:[5,27],instruct:24,alreadi:[18,24,13,14,22,7],done:[29,22,1],least:[24,1,29,27,5,21,22],llfuse:24,indistinguish:23,agre:22,open:[11,29,13,26],s3c:13,size:[23,25,29,2,14,28,15,21,22,7],given:[22,7],"long":[5,27,15,7,1],convent:7,script:[5,15,29,7],unknown:23,interact:3,s3qllock:[9,0,19,10,5,15,14],sometim:16,wrapper:[5,4],parallel:[5,15,21,29,4],checkpoint:1,attack:[0,7,14],necessarili:1,master:22,demonstr:5,statement:13,similarli:[],s3qlrm:[9,0,19,10,27,5,14],termin:[11,12,26,7],john:13,"final":[22,14],store:[8,9,23,21,1,25,29,20,27,2,12,13,3,5,15,16,22],includ:[23,19,1,13,24,22,7],servi:[],luckili:[],consol:13,option:[0,1,2,3,4,5,6,7,8,10,11,14,15,16,18,20,21,24,25,26,27,28,29],especi:[15,13,23],shelf:[0,14],tool:13,copi:[18,9,23,1,14,4,5,15,16,22,7],inaccess:1,specifi:[8,21,25,29,20,27,2,12,13,3,5,28,16,22,7],"var":13,part:[23,29,27,4,5,22],pars:12,mostli:[],consult:[8,25,21,3],exactli:[5,18,27,14],than:[10,1,25,29,27,2,13,7,5,15,22,14],wide:[29,13,24],downright:13,target:[8,18,21,29,20,3,15,16,14],whenev:[29,12,24,15],prevent:[2,0,25,14,1],remov:[18,9,0,29,10,27,28,7,5,6,22,14],older:16,tree:[18,9,0,10,4,5,23,22,14],second:[1,29,27,12,5,15,21,22],structur:[23,16],charact:22,project:13,matter:[28,15,16],optimum:15,num:[29,21],friend:15,histor:[],posit:22,video:29,minut:[5,27],other:[18,0,24,1,29,10,23,13,17,28,6,21,22,14],pre:29,unencrypt:[2,25],sai:[18,14,1],comput:[23,1,29,27,5,22],entail:[],close:[11,26],plaintext:[],explicit:15,ram:[],mind:1,argument:[28,16,3],correspond:13,"13th":23,packag:[5,24],expir:29,increment:[],disadvantag:[18,14],need:[18,21,24,1,29,27,13,5,16,22,14],seem:[15,13],exclud:[0,14],https_proxi:13,paramiko:[],caus:[13,1],engin:13,techniqu:1,equival:[5,27],min:[],irrepar:16,destroi:[0,14],moreov:14,blindli:7,atim:7,accuraci:[5,27],note:[18,9,23,24,1,11,29,26,27,13,7,4,5,15,16,14],also:[0,1,3,4,5,6,14,8,10,11,12,13,15,18,19,21,22,23,24,25,26,27,28,29],builtin:[],denomin:[],take:[18,23,1,14,3,28,15,16,22,7],which:[18,10,24,1,23,27,12,14,5,22,7],discrep:[],transmit:[],environ:[13,24],zlib:[29,21],uplink:5,singl:[15,21,29,1],mktemp:29,begin:[12,22],sure:[21,24,29,13,15,16,22,7],importantli:[],distribut:[5,29,24,1],plenti:[],normal:[12,13,29,21],multipli:[],previou:[5,16],compress:[9,23,29,5,21,22,14],discov:1,most:[8,18,21,1,29,20,27,12,13,7,3,5,16,22,14],beta:23,detect:[23,13,1],rigor:[5,27],plan:[],strongest:[],homepag:[8,18,0,11,25,10,3,28,6,21],"class":[8,18,0,11,25,10,27,28,3,4,5,6,21],relatim:7,tradit:1,simplic:23,renam:23,inconveni:23,ship:[27,29,4],filesystem:[25,29,20,2,15,21,22],authfil:[8,21,25,20,2,12,3,16,29],doc:[8,18,0,11,25,10,28,3,5,6,21,22],clear:[18,16,14],later:[18,0,13,7,14],cover:15,drive:[0,14],destruct:[0,14],doe:[23,1,29,26,13,22,7],declar:23,snapshot:[18,9,23,28,14],runtim:[9,14],determin:[5,29,22,1],occasion:13,left:[7,1],hmac:[23,22],fact:13,think:[],myawssecretaccesskei:[],show:27,carefulli:1,random:22,syntax:[29,20,2,28,16,14],session:22,permiss:[5,23,21,29],bucketnam:13,newest:[15,3],find:[0,29,7,14,1],damag:[5,27,16,1],rotat:[8,16,29,20,3,21],redirect:29,absolut:[5,27,13],onli:[0,1,2,3,4,5,6,7,8,10,11,13,14,15,16,18,20,21,22,23,24,25,26,27,28,29],explicitli:7,ratio:29,launchpad:24,transact:23,fstab:[29,7],activ:[8,18,0,21,11,25,10,26,20,27,2,12,13,3,4,28,6,16,29,14],enough:[15,21,29,1],start:[24,29,12,4,5,15],haven:[],authinfo:[],latenc:[15,23,4],tape:[0,14],rich:[],factor:[5,13,1],folder:[18,24,14],local:[8,9,0,24,1,18,11,25,10,13,29,23,3,28,6,15,21,22],defin:[5,27,12,29],overwritten:22,keyr:[],shrink:23,contribut:[5,9],variou:[28,16,3],get:[8,9,0,21,24,25,29,20,27,2,17,3,5,28,16,22,14],googlegroup:17,nasti:[0,14],stop:29,secondari:[],regularli:[18,14],ssl:[8,21,25,20,2,3,16,29,7],s3rr:[],cannot:[5,27,22,1],ssh:[9,15,13],increas:[1,29,13,15,21,22],reconstruct:[5,27],neither:[0,14,1],restart:[29,7],myawsaccesskeyid:[],reveal:23,enabl:[29,21],held:22,dramat:[15,13],"19283712_yourname_s3ql":[],myfsdata:15,provid:[23,24,1,29,13,22,7],bad:15,continu:26,common:[8,18,0,11,25,10,3,28,6,21,14],contain:[24,1,29,27,13,5,22],userspac:[],nowher:[],where:[28,16,3,1],valid:14,caches:[28,29,21,14],wiki:[24,22,17],kernel:24,set:[8,21,25,20,2,3,5,15,16,29],detail:[9,1,13,5,15,22,7],noleaf:7,bucket1:[],speak:[29,1],bucket3:[],bucket2:[],startup:29,packet:22,displai:[],see:[8,18,0,21,1,11,25,10,27,28,13,29,7,3,4,5,6,15,16,22,14],temporarili:29,s3qlcp:[5,9,18,19,14],respons:1,fail:[24,7,1],led:12,"__version__":24,becaus:[18,23,1,29,5,22,14],whatsoev:[0,23,14],best:[15,13,24,29],concern:1,infinit:[23,1],awar:1,statu:[8,9,0,1,18,11,25,10,27,23,3,4,28,6,21,7],said:1,extend:23,correctli:[7,20],hopefulli:7,databas:[23,22],boundari:[5,27],wikipedia:22,label:[2,25],favor:23,state:[5,27,23,7],smallest:1,between:[5,27,29,21,1],remount:[],"import":[5,9,13,24,1],awai:1,param:16,across:23,speed:[5,29],attribut:23,amazon:[9,23,1,13,5,22,7],august:[],manpag:[9,19],weak:[],inconsist:7,southeast:[],job:[5,29],entir:[23,0,10,14,22],joe:[5,12],expire_backup:[5,9,19,27],solv:15,advertis:13,come:[5,15,23,1],local0:29,roughli:29,addit:[18,10,1,29,23,3,28,16,22,14],both:[18,23,22,14,1],protect:[0,23,14],accident:[2,0,25,14],last:12,irregular:[5,27],rogerbinn:24,someth:[18,14],howev:[18,0,1,29,23,27,13,14,5,15,22,7],anyth:1,alon:[],lazi:[11,26],against:[23,0,24,22,14],configpars:12,etc:[18,29,7,14],consi:[],cachedir:[8,21,1,25,20,2,3,16,29],exec:29,freeli:29,corrupt:1,com:[8,18,0,24,11,25,10,27,13,3,4,28,6,15,21,22,17],pcp:[5,9,15,19,4],load:29,among:13,simpli:[0,14,1],technic:[13,1],figur:1,inspir:[18,14],buti:[],period:[0,22,14,1],insist:15,cryptopp:22,batch:[8,29,20],written:[23,21,29,26,1],littl:[29,24,1],shutdown:29,linux:[23,24,29],averag:[13,1],respect:[13,1],guid:[8,9,19,25,3,21],assum:29,duplic:[18,9,23,1,13,5,22,14],quit:24,worthless:[0,14],strong:[8,18,0,11,25,10,27,3,4,28,6,21],west:[],rackspac:[9,13,1],devic:[29,22],three:[29,13,24],been:[0,1,11,29,23,26,20,27,13,7,5,15,16,22,14],mark:[8,20,1],compon:23,secret:13,much:4,destin:[18,15,14,4],interpret:29,untouch:1,subscrib:17,monthli:[18,14],futur:[18,0,1,10,14,28,6,7],immedi:[10,1,11,29,26,22,14],hesit:1,strategi:[5,27],invis:22,legaci:13,infect:[0,14],upstart:[5,29,21],great:[0,14],ani:[8,18,0,24,1,25,23,27,2,13,17,5,22,14],zero:[15,1],understand:[29,21],togeth:13,input:[8,20],tradition:[0,14],s3qlstat:[6,19,14,9],logger:29,those:[13,22],"case":[18,0,24,1,23,27,12,5,15,16,22,14],replic:[5,18,23,14,1],trojan:[0,14],ident:[18,23,22,14,1],look:[15,1],gnu:7,solid:23,plain:[2,25],mount:[18,9,0,21,19,1,11,29,10,26,28,13,7,3,5,6,15,16,22,14],bill:12,sourceforg:[],trick:[9,15],documents_februari:[18,14],calcul:22,abov:[5,27,13,1],error:[8,9,0,1,18,11,25,10,20,27,23,3,4,28,6,21,7],login:[12,13],invoc:[5,27,1],ahax:4,region:[5,13,1],jibbadup:[],propag:22,argpars:[],have:[0,1,2,4,5,7,11,12,13,14,15,16,17,18,21,22,23,24,25,26,27,29],advantag:[5,27,0,14],stdout:29,almost:15,mtime:7,therefor:[5,29,13,7,1],non:[],worri:[],quiet:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,16,29],archiv:[23,13,24],gsutil:[],conf:[5,9],incom:[],revis:[16,3],dedic:[29,7],sever:[23,24,1,29,13,4,5,15,21,22],tamper:[5,27],unmount:[9,1,11,29,26,20,3,5,15,16,22,7],develop:[9,23,13,24,22],author:[29,7],receiv:1,media:13,make:[18,0,21,24,29,23,27,13,14,5,15,16,22,7],flushcach:[28,14],header:[12,24],same:[18,1,29,27,13,5,15,16,22,14],"while":[23,24,1,29,0,26,28,22,14],shorter:[],dest:18,when:[8,0,21,1,25,23,20,27,2,12,13,29,7,3,4,5,15,16,22,14],html:22,unexpectedli:7,nikolau:29,auto:[29,21],pai:13,document:[8,18,0,11,25,10,3,28,6,21,14],infer:[5,27],higher:1,week:[5,27],geograph:[13,1],raid:1,hostnam:13,closest:13,lie:18,optim:[29,21],swordfish:12,confidenti:[],upon:7,effect:[18,23,14,1],hand:13,remot:[8,23,21,25,20,2,13,3,15,16,29],amazonwebservic:22,rais:[29,21],temporari:1,user:[0,1,3,6,14,8,9,10,11,13,15,18,19,20,21,22,23,24,25,26,28,29],mani:[5,27,23,13,1],extern:[0,13,14],kib:[25,2,28,21,29,7],typic:[18,14,1],recent:[29,27,5,16,22,7],lower:1,appropri:29,kept:[8,21,1,29,20,3,16],scenario:1,eleg:23,firstli:1,entri:[12,21,29],thu:1,irrelev:[],well:[0,21,1,29,10,27,12,5,16,14],object:[1,25,29,2,13,21,22],without:[8,18,0,1,23,20,14,15,16,7],exampl:[23,1,27,12,14,5,15,22,7],command:[0,2,3,4,5,6,7,8,9,10,11,12,14,16,18,19,20,21,24,25,26,27,28,29],expens:1,thi:[0,1,2,3,4,5,6,7,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29],choos:1,gzip:23,credenti:[8,21,25,20,2,12,3,16,29],spend:15,ubuntu:24,usual:[29,22],compromis:15,mib:[8,16,29,20,3,21,7],identifi:13,just:[8,18,0,21,1,11,25,10,26,20,27,2,3,4,28,6,15,16,29,14],less:13,conform:23,complet:[18,1,29,27,28,5,21,14],obtain:[],rest:[15,22,1],indic:[],front:22,bandwidth:[5,23],kill:29,file:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,21,22,23,25,26,27,28,29],heavili:13,touch:[18,14],openstack:[9,23,13],storage_url:29,http_proxi:13,runlevel:29,yet:[22,7,1],web:[13,1],viru:[0,14],detach:[11,26],homedir:[],easi:15,hint:[28,16,3],doesn:1,qualiti:13,point:[23,1,11,29,13,21,22],had:[5,18,27,14],except:[12,1],theoret:15,gss:[],add:[0,14],spread:[2,25,1],nor:[0,14],versa:[18,14],els:16,c11:[],east:[],match:[13,1],build:24,earli:7,applic:[12,13,22,7],transpar:23,webpag:13,big:[15,7],ctime:7,fast:[9,23,29,22,14],built:[],traffic:13,know:[5,18,27,14,1],background:[11,22,26],insert:22,amp:15,bit:[23,22],password:[2,12,13,25],recurs:[5,9,10,14],you:[18,0,21,24,1,11,25,17,10,26,20,27,2,13,7,5,15,16,29,14],like:[18,0,1,29,23,14,4,21,22,7],loss:[13,1],daemon:[29,21],swift:[9,13],lost:[13,1],success:[],whitespac:[],should:[8,18,0,21,24,1,11,25,10,26,20,13,7,3,28,6,15,16,29,14],outag:1,arbitrari:[15,13],manual:[11,24,26,17],resolv:[17,1],noth:[0,14],princip:7,necessari:[16,22],either:[1,14,3,28,16,7],lose:[9,13,1],output:[8,18,0,21,11,25,10,26,20,27,2,3,4,28,6,16,29],"function":[16,22],per:29,page:[13,19,1],two:[18,23,1,16,22,14],yyyi:[5,27],imagin:[5,27,0,14],www:22,right:[15,1],old:[8,0,21,1,29,20,27,3,5,16,14],often:[15,13,1],deal:[],ll23bi:12,acknowledg:13,interv:[5,27,15,21,29],compat:[9,13],some:[0,1,3,4,5,6,7,8,10,11,13,18,20,21,22,23,24,25,26,27,28,29],umount:[9,19,11,29,26,7],self:24,intern:[13,22,1],"export":[29,21],unchang:22,flush:[29,14],home:[5,15,13],server:[8,21,25,20,2,13,3,15,16,29,7],fanat:13,librari:[24,22,7],basic:[],rsync:[18,0,14,4,5,15,7],confirm:[10,14],stronger:[],freebsd:[23,24],avoid:[5,9,13,27,1],though:1,definit:[5,27],februari:[18,14],protocol:13,buffer:7,equal:29,larg:[18,15,7,14],slash:13,peculiar:[13,1],auth:13,backend:[8,9,21,1,18,11,25,29,26,20,2,12,13,7,3,28,15,16,22,14],blocksiz:[],machin:[],core:[5,1],plu:[],who:[11,29,21,22,26],run:[0,21,24,1,29,23,20,27,28,14,3,5,16,7],power:5,certif:[13,7],reach:[8,16,29,20,3,21,22],view:19,usag:[5,18,27,14],symlink:23,solut:5,broken:1,step:5,nutshel:[9,1],obei:1,although:[23,10,7,14],januari:[18,13,14],bi23ll:12,immut:[9,0,10,5,23,15,14],impos:[],panel:13,sshf:[15,13],src:[18,14],about:[9,23,1,29,13,6,15,22,14],rare:[],socket:22,proce:24,commun:13,http:[8,18,0,24,11,25,10,27,13,3,4,28,6,21,22],briefli:[],storebackup:[18,14],unfortun:[15,13,7,1],degre:1,her:[0,14],back:[0,13,14],messag:[8,16,25,29,20,2,3,21,22],fals:[29,21],bz2:22,backup:[18,9,0,1,29,23,27,13,3,5,15,16,14],disabl:[8,16,29,20,3,21],block:[23,1,11,29,26,14,28,22,7],cloudfil:[9,13,1],ppa:24,own:7,real:1,encount:[17,7],xyz:[],within:[12,14],encod:29,bound:1,terminolog:[],due:[13,7],down:[5,11,29,26,7],nevertheless:[5,1],explain:1,ahv:15,authinfo2:[8,16,25,20,2,3,21,29],contrib:[5,15,29],chang:[18,9,0,1,29,23,14,3,28,16,22,7],insuffici:7,storag:[8,9,0,21,1,18,11,25,23,20,2,12,13,29,7,3,5,16,22,14],your:[8,18,0,19,24,1,11,25,10,27,28,13,7,3,5,6,15,21,29,14],durabl:[9,13,1],manag:[9,13,16],jspa:22,mkf:[8,9,19,25,2,22],stricli:[],fusermount:[11,26,7],prepar:28,suffici:1,transfer:[5,15,23],execut:[5,16,24,14],support:[18,23,1,29,13,14,7],question:17,s3_backup:[5,9],overwrit:[2,25],custom:13,avail:[8,0,21,25,29,27,14,3,5,16,22,7],intellig:[5,27,23],reli:[7,1],trigger:14,low:[23,13],lot:15,suit:13,forward:1,perform:[9,23,24,1,29,28,13,3,4,5,15,16,7],succeed:[8,18,0,11,25,10,27,3,4,28,6,21],individu:[29,21,22,4],stage:[],lowest:[],properli:5,tracker:[23,24,17],interest:[22,14],form:[5,27,13,1],offer:[18,13,14,1],forc:[8,2,25,20],handl:[18,9,23,1,29,27,14,5,15,22,7],regard:[18,14],"24h":[29,21],sigstop:[29,21],infrequ:[],satur:29,measur:[5,1],newer:[24,1],don:[29,21],line:[28,23],mitig:1,bug:[23,24,17,7],longer:[23,0,26,27,14,5,16,7],info:[8,16,29,20,3,28,21],utc:22,made:[18,0,1,23,15,22,14],cif:29,consist:[9,12,13,22,1],possibl:[0,24,1,29,23,13,14,15,16,7],"default":[8,21,25,20,27,2,3,4,5,16,29],commit:[22,7],bucket:[5,12,13],maximum:[1,25,29,2,5,21,22],tell:[5,27,29],asynchron:23,independ:[23,21,29],below:[13,14,1],limit:[18,0,29,10,28,14,5,6,21,7],s3ql_upstart:[5,9],unnot:13,problem:[8,18,0,1,17,23,27,14,5,15,22,7],similar:29,creation:[2,25,9],connect:[8,23,21,25,29,20,2,13,3,15,16,22],passphras:[9,12,13,3,16,22],featur:[18,9,0,1,23,13,14],hash:22,creat:[18,0,21,1,25,10,27,2,13,29,5,23,16,22,14],classic:[],certain:[],dure:[21,16,29],day_hour:[5,27],stabl:23,s3qlctrl:[28,9,15,19,14],sale:13,strongli:[5,27],workaround:15,decreas:4,chat:13,guarante:[5,27,13,1],request:1,exist:[18,0,1,25,10,27,2,13,5,22,14],improv:[5,9,15,4],mybucket:[],check:[8,9,24,1,29,20,16,22,7],link:[13,24,22],probabl:[23,1,27,5,15,16,14],otherwis:[29,21,22],again:[0,26,22,14,1],readi:[],rsync_arg:15,umask:29,googl:[8,9,0,24,1,18,11,25,10,27,13,23,3,4,28,6,21,7],sequenti:[],tip:[9,15],exception:[],prepend:13,prais:13,fs1:12,fs2:12,fs3:12,creep:23,rememb:[],test:[23,24],presum:1,thousand:[29,13],rid:[0,14],particular:[],variabl:[13,24],intend:[],clean:[8,22,20],fulli:1,mountpoint:[29,26,13,28,6,15,21,22,14],why:13,"return":[8,18,0,1,11,25,10,26,27,3,4,28,6,21,7],fsck:[8,9,19,1,29,20,13,16],rise:1,releas:23,track:[5,27],log:[8,21,29,20,12,13,3,28,16,14],consid:[12,17,1],sql:26,decrypt:12,log_fifo:29,unless:[2,0,25,14],dd_hh:[5,27],pool:[],stai:[29,21],reduc:[5,13,1],outdat:1,backward:[],leav:7,faster:[10,14],pycrypto:24,vice:[18,14],directori:[0,1,2,3,4,5,7,8,10,11,13,14,15,16,18,20,21,22,23,24,25,27,29],cycl:[5,27],incompet:13,descript:[8,18,0,11,25,10,27,3,4,28,6,15,21,29],save:[27,15,23,1],rule:[9,15,13,1],sftp:[],itself:[24,1],ignor:[],gracefulli:[5,27],potenti:1,time:[8,0,21,1,25,23,20,27,2,13,29,7,3,5,15,16,22,14],profil:[29,21],s3qladm:[9,16,19,3,1],daili:[]},objtypes:{},titles:["The <strong class=\"program\">s3qllock</strong> command","Important Rules to Avoid Losing Data","File System Creation","The <strong class=\"program\">s3qladm</strong> command","The <strong class=\"program\">pcp</strong> command","Contributed Programs","The <strong class=\"program\">s3qlstat</strong> command","Known Issues","The <strong class=\"program\">fsck.s3ql</strong> command","S3QL User’s Guide","The <strong class=\"program\">s3qlrm</strong> command","The <strong class=\"program\">umount.s3ql</strong> command","Storing Authentication Information","Storage Backends","Advanced S3QL Features","Tips & Tricks","Managing File Systems","Further Resources / Getting Help","The <strong class=\"program\">s3qlcp</strong> command","Manpages","Checking for Errors","The <strong class=\"program\">mount.s3ql</strong> command","Implementation Details","About S3QL","Installation","The <strong class=\"program\">mkfs.s3ql</strong> command","Unmounting","The <strong class=\"program\">expire_backups</strong> command","The <strong class=\"program\">s3qlctrl</strong> command","Mounting"],objnames:{},filenames:["man/lock","durability","mkfs","man/adm","man/pcp","contrib","man/stat","issues","man/fsck","index","man/rm","man/umount","authinfo","backends","special","tips","adm","resources","man/cp","man/index","fsck","man/mount","impl_details","about","installation","man/mkfs","umount","man/expire_backups","man/ctrl","mount"]})
\ No newline at end of file diff --git a/doc/html/special.html b/doc/html/special.html index fccda71..aee65ac 100644 --- a/doc/html/special.html +++ b/doc/html/special.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Advanced S3QL Features — S3QL 1.11.1 documentation</title> + <title>Advanced S3QL Features — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Unmounting" href="umount.html" /> <link rel="prev" title="Mounting" href="mount.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="mount.html" title="Mounting" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -268,7 +268,7 @@ been flushed.</td> <li class="right" > <a href="mount.html" title="Mounting" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/tips.html b/doc/html/tips.html index 33a42fe..0d04f17 100644 --- a/doc/html/tips.html +++ b/doc/html/tips.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Tips & Tricks — S3QL 1.11.1 documentation</title> + <title>Tips & Tricks — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Known Issues" href="issues.html" /> <link rel="prev" title="Contributed Programs" href="contrib.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="contrib.html" title="Contributed Programs" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -192,7 +192,7 @@ details.</p> <li class="right" > <a href="contrib.html" title="Contributed Programs" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/html/umount.html b/doc/html/umount.html index 4900b4a..8bba649 100644 --- a/doc/html/umount.html +++ b/doc/html/umount.html @@ -8,7 +8,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Unmounting — S3QL 1.11.1 documentation</title> + <title>Unmounting — S3QL 1.12 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -16,7 +16,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '1.11.1', + VERSION: '1.12', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -26,7 +26,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="author" title="About these documents" href="about.html" /> - <link rel="top" title="S3QL 1.11.1 documentation" href="index.html" /> + <link rel="top" title="S3QL 1.12 documentation" href="index.html" /> <link rel="next" title="Checking for Errors" href="fsck.html" /> <link rel="prev" title="Advanced S3QL Features" href="special.html" /> </head> @@ -40,7 +40,7 @@ <li class="right" > <a href="special.html" title="Advanced S3QL Features" accesskey="P">previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="sphinxsidebar"> @@ -147,7 +147,7 @@ upload data in the background for a while longer.</p> <li class="right" > <a href="special.html" title="Advanced S3QL Features" >previous</a> |</li> - <li><a href="index.html">S3QL 1.11.1 documentation</a> »</li> + <li><a href="index.html">S3QL 1.12 documentation</a> »</li> </ul> </div> <div class="footer"> diff --git a/doc/latex/manual.aux b/doc/latex/manual.aux index 3e99eb6..59ecb9a 100644 --- a/doc/latex/manual.aux +++ b/doc/latex/manual.aux @@ -1,16 +1,19 @@ \relax -\ifx\hyper@anchor\@undefined -\global \let \oldcontentsline\contentsline -\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} -\global \let \oldnewlabel\newlabel -\gdef \newlabel#1#2{\newlabelxx{#1}#2} -\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} -\AtEndDocument{\let \contentsline\oldcontentsline -\let \newlabel\oldnewlabel} -\else -\global \let \hyper@last\relax -\fi - +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} \select@language{english} \@writefile{toc}{\select@language{english}} \@writefile{lof}{\select@language{english}} @@ -222,8 +225,8 @@ \newlabel{man/mount:description}{{15.3.2}{41}{Description\relax }{subsection.15.3.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.3.3}Options}{41}{subsection.15.3.3}} \newlabel{man/mount:options}{{15.3.3}{41}{Options\relax }{subsection.15.3.3}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.3.4}Exit Status}{43}{subsection.15.3.4}} -\newlabel{man/mount:exit-status}{{15.3.4}{43}{Exit Status\relax }{subsection.15.3.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.3.4}Exit Status}{42}{subsection.15.3.4}} +\newlabel{man/mount:exit-status}{{15.3.4}{42}{Exit Status\relax }{subsection.15.3.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.3.5}See Also}{43}{subsection.15.3.5}} \newlabel{man/mount:see-also}{{15.3.5}{43}{See Also\relax }{subsection.15.3.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {15.4}The \textbf {s3qlstat} command}{43}{section.15.4}} @@ -239,19 +242,19 @@ \newlabel{man/stat:exit-status}{{15.4.4}{43}{Exit Status\relax }{subsection.15.4.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.4.5}See Also}{43}{subsection.15.4.5}} \newlabel{man/stat:see-also}{{15.4.5}{43}{See Also\relax }{subsection.15.4.5}{}} -\@writefile{toc}{\contentsline {section}{\numberline {15.5}The \textbf {s3qlctrl} command}{44}{section.15.5}} -\newlabel{man/ctrl:the-s3qlctrl-command}{{15.5}{44}{The \textbf {s3qlctrl} command\relax }{section.15.5}{}} -\newlabel{man/ctrl::doc}{{15.5}{44}{The \textbf {s3qlctrl} command\relax }{section.15.5}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.5.1}Synopsis}{44}{subsection.15.5.1}} -\newlabel{man/ctrl:synopsis}{{15.5.1}{44}{Synopsis\relax }{subsection.15.5.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {15.5}The \textbf {s3qlctrl} command}{43}{section.15.5}} +\newlabel{man/ctrl:the-s3qlctrl-command}{{15.5}{43}{The \textbf {s3qlctrl} command\relax }{section.15.5}{}} +\newlabel{man/ctrl::doc}{{15.5}{43}{The \textbf {s3qlctrl} command\relax }{section.15.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.5.1}Synopsis}{43}{subsection.15.5.1}} +\newlabel{man/ctrl:synopsis}{{15.5.1}{43}{Synopsis\relax }{subsection.15.5.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.5.2}Description}{44}{subsection.15.5.2}} \newlabel{man/ctrl:description}{{15.5.2}{44}{Description\relax }{subsection.15.5.2}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.5.3}Options}{44}{subsection.15.5.3}} \newlabel{man/ctrl:options}{{15.5.3}{44}{Options\relax }{subsection.15.5.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.5.4}Exit Status}{44}{subsection.15.5.4}} \newlabel{man/ctrl:exit-status}{{15.5.4}{44}{Exit Status\relax }{subsection.15.5.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.5.5}See Also}{45}{subsection.15.5.5}} -\newlabel{man/ctrl:see-also}{{15.5.5}{45}{See Also\relax }{subsection.15.5.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.5.5}See Also}{44}{subsection.15.5.5}} +\newlabel{man/ctrl:see-also}{{15.5.5}{44}{See Also\relax }{subsection.15.5.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {15.6}The \textbf {s3qlcp} command}{45}{section.15.6}} \newlabel{man/cp:the-s3qlcp-command}{{15.6}{45}{The \textbf {s3qlcp} command\relax }{section.15.6}{}} \newlabel{man/cp::doc}{{15.6}{45}{The \textbf {s3qlcp} command\relax }{section.15.6}{}} @@ -261,8 +264,8 @@ \newlabel{man/cp:description}{{15.6.2}{45}{Description\relax }{subsection.15.6.2}{}} \@writefile{toc}{\contentsline {subsubsection}{Snapshotting vs Hardlinking}{45}{subsubsection*.3}} \newlabel{man/cp:snapshotting-vs-hardlinking}{{15.6.2}{45}{Snapshotting vs Hardlinking\relax }{subsubsection*.3}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.6.3}Options}{46}{subsection.15.6.3}} -\newlabel{man/cp:options}{{15.6.3}{46}{Options\relax }{subsection.15.6.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.6.3}Options}{45}{subsection.15.6.3}} +\newlabel{man/cp:options}{{15.6.3}{45}{Options\relax }{subsection.15.6.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.6.4}Exit Status}{46}{subsection.15.6.4}} \newlabel{man/cp:exit-status}{{15.6.4}{46}{Exit Status\relax }{subsection.15.6.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.6.5}See Also}{46}{subsection.15.6.5}} @@ -278,8 +281,8 @@ \newlabel{man/rm:options}{{15.7.3}{46}{Options\relax }{subsection.15.7.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.7.4}Exit Status}{46}{subsection.15.7.4}} \newlabel{man/rm:exit-status}{{15.7.4}{46}{Exit Status\relax }{subsection.15.7.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.7.5}See Also}{47}{subsection.15.7.5}} -\newlabel{man/rm:see-also}{{15.7.5}{47}{See Also\relax }{subsection.15.7.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.7.5}See Also}{46}{subsection.15.7.5}} +\newlabel{man/rm:see-also}{{15.7.5}{46}{See Also\relax }{subsection.15.7.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {15.8}The \textbf {s3qllock} command}{47}{section.15.8}} \newlabel{man/lock:the-s3qllock-command}{{15.8}{47}{The \textbf {s3qllock} command\relax }{section.15.8}{}} \newlabel{man/lock::doc}{{15.8}{47}{The \textbf {s3qllock} command\relax }{section.15.8}{}} @@ -291,8 +294,8 @@ \newlabel{man/lock:rationale}{{15.8.3}{47}{Rationale\relax }{subsection.15.8.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.8.4}Options}{47}{subsection.15.8.4}} \newlabel{man/lock:options}{{15.8.4}{47}{Options\relax }{subsection.15.8.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.8.5}Exit Status}{48}{subsection.15.8.5}} -\newlabel{man/lock:exit-status}{{15.8.5}{48}{Exit Status\relax }{subsection.15.8.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.8.5}Exit Status}{47}{subsection.15.8.5}} +\newlabel{man/lock:exit-status}{{15.8.5}{47}{Exit Status\relax }{subsection.15.8.5}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.8.6}See Also}{48}{subsection.15.8.6}} \newlabel{man/lock:see-also}{{15.8.6}{48}{See Also\relax }{subsection.15.8.6}{}} \@writefile{toc}{\contentsline {section}{\numberline {15.9}The \textbf {umount.s3ql} command}{48}{section.15.9}} @@ -306,8 +309,8 @@ \newlabel{man/umount:options}{{15.9.3}{48}{Options\relax }{subsection.15.9.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.9.4}Exit Status}{48}{subsection.15.9.4}} \newlabel{man/umount:exit-status}{{15.9.4}{48}{Exit Status\relax }{subsection.15.9.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.9.5}See Also}{49}{subsection.15.9.5}} -\newlabel{man/umount:see-also}{{15.9.5}{49}{See Also\relax }{subsection.15.9.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.9.5}See Also}{48}{subsection.15.9.5}} +\newlabel{man/umount:see-also}{{15.9.5}{48}{See Also\relax }{subsection.15.9.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {15.10}The \textbf {fsck.s3ql} command}{49}{section.15.10}} \newlabel{man/fsck::doc}{{15.10}{49}{The \textbf {fsck.s3ql} command\relax }{section.15.10}{}} \newlabel{man/fsck:the-fsck-s3ql-command}{{15.10}{49}{The \textbf {fsck.s3ql} command\relax }{section.15.10}{}} @@ -319,8 +322,8 @@ \newlabel{man/fsck:options}{{15.10.3}{49}{Options\relax }{subsection.15.10.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.10.4}Exit Status}{49}{subsection.15.10.4}} \newlabel{man/fsck:exit-status}{{15.10.4}{49}{Exit Status\relax }{subsection.15.10.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.10.5}See Also}{50}{subsection.15.10.5}} -\newlabel{man/fsck:see-also}{{15.10.5}{50}{See Also\relax }{subsection.15.10.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.10.5}See Also}{49}{subsection.15.10.5}} +\newlabel{man/fsck:see-also}{{15.10.5}{49}{See Also\relax }{subsection.15.10.5}{}} \@writefile{toc}{\contentsline {section}{\numberline {15.11}The \textbf {pcp} command}{50}{section.15.11}} \newlabel{man/pcp:the-pcp-command}{{15.11}{50}{The \textbf {pcp} command\relax }{section.15.11}{}} \newlabel{man/pcp::doc}{{15.11}{50}{The \textbf {pcp} command\relax }{section.15.11}{}} @@ -334,15 +337,15 @@ \newlabel{man/pcp:exit-status}{{15.11.4}{50}{Exit Status\relax }{subsection.15.11.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.11.5}See Also}{50}{subsection.15.11.5}} \newlabel{man/pcp:see-also}{{15.11.5}{50}{See Also\relax }{subsection.15.11.5}{}} -\@writefile{toc}{\contentsline {section}{\numberline {15.12}The \textbf {expire\_backups} command}{51}{section.15.12}} -\newlabel{man/expire_backups::doc}{{15.12}{51}{The \textbf {expire\_backups} command\relax }{section.15.12}{}} -\newlabel{man/expire_backups:the-expire-backups-command}{{15.12}{51}{The \textbf {expire\_backups} command\relax }{section.15.12}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.12.1}Synopsis}{51}{subsection.15.12.1}} -\newlabel{man/expire_backups:synopsis}{{15.12.1}{51}{Synopsis\relax }{subsection.15.12.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.12.2}Description}{51}{subsection.15.12.2}} -\newlabel{man/expire_backups:description}{{15.12.2}{51}{Description\relax }{subsection.15.12.2}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {15.12.3}Options}{52}{subsection.15.12.3}} -\newlabel{man/expire_backups:options}{{15.12.3}{52}{Options\relax }{subsection.15.12.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {15.12}The \textbf {expire\_backups} command}{50}{section.15.12}} +\newlabel{man/expire_backups::doc}{{15.12}{50}{The \textbf {expire\_backups} command\relax }{section.15.12}{}} +\newlabel{man/expire_backups:the-expire-backups-command}{{15.12}{50}{The \textbf {expire\_backups} command\relax }{section.15.12}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.12.1}Synopsis}{50}{subsection.15.12.1}} +\newlabel{man/expire_backups:synopsis}{{15.12.1}{50}{Synopsis\relax }{subsection.15.12.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.12.2}Description}{50}{subsection.15.12.2}} +\newlabel{man/expire_backups:description}{{15.12.2}{50}{Description\relax }{subsection.15.12.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {15.12.3}Options}{51}{subsection.15.12.3}} +\newlabel{man/expire_backups:options}{{15.12.3}{51}{Options\relax }{subsection.15.12.3}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.12.4}Exit Status}{52}{subsection.15.12.4}} \newlabel{man/expire_backups:exit-status}{{15.12.4}{52}{Exit Status\relax }{subsection.15.12.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {15.12.5}See Also}{52}{subsection.15.12.5}} diff --git a/doc/latex/manual.log b/doc/latex/manual.log index 825cc09..9dc50e6 100644 --- a/doc/latex/manual.log +++ b/doc/latex/manual.log @@ -1,17 +1,17 @@ -This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=pdflatex 2012.3.8) 4 MAY 2012 11:08 +This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) (format=pdflatex 2012.8.5) 3 SEP 2012 21:02 entering extended mode + restricted \write18 enabled. %&-line parsing enabled. **manual.tex (./manual.tex -LaTeX2e <2009/09/24> -Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh -yphenation, ngerman, german, german-x-2009-06-19, ngerman-x-2009-06-19, loaded. - +LaTeX2e <2011/06/27> +Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, ng +erman, german, swissgerman, ngerman-x-2012-05-30, german-x-2012-05-30, loaded. (./sphinxmanual.cls Document Class: sphinxmanual 2009/06/02 Document class (Sphinx manual) -(/usr/share/texmf-texlive/tex/latex/base/report.cls +(/usr/share/texlive/texmf-dist/tex/latex/base/report.cls Document Class: report 2007/10/19 v1.4h Standard LaTeX document class -(/usr/share/texmf-texlive/tex/latex/base/size10.clo +(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option) ) \c@part=\count79 @@ -26,17 +26,17 @@ File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option) \abovecaptionskip=\skip41 \belowcaptionskip=\skip42 \bibindent=\dimen102 -)) (/usr/share/texmf-texlive/tex/latex/base/inputenc.sty +)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty Package: inputenc 2008/03/30 v1.1d Input encoding file \inpenc@prehook=\toks14 \inpenc@posthook=\toks15 -(/usr/share/texmf-texlive/tex/latex/base/utf8.def +(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def File: utf8.def 2008/04/05 v1.1m UTF-8 support for inputenc Now handling font encoding OML ... ... no UTF-8 mapping file for font encoding OML Now handling font encoding T1 ... ... processing UTF-8 mapping file for font encoding T1 -(/usr/share/texmf-texlive/tex/latex/base/t1enc.dfu +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu File: t1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc defining Unicode char U+00A1 (decimal 161) defining Unicode char U+00A3 (decimal 163) @@ -185,7 +185,7 @@ File: t1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc ) Now handling font encoding OT1 ... ... processing UTF-8 mapping file for font encoding OT1 -(/usr/share/texmf-texlive/tex/latex/base/ot1enc.dfu +(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu File: ot1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc defining Unicode char U+00A1 (decimal 161) defining Unicode char U+00A3 (decimal 163) @@ -215,7 +215,7 @@ File: ot1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc ) Now handling font encoding OMS ... ... processing UTF-8 mapping file for font encoding OMS -(/usr/share/texmf-texlive/tex/latex/base/omsenc.dfu +(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu File: omsenc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc defining Unicode char U+00A7 (decimal 167) defining Unicode char U+00B6 (decimal 182) @@ -240,17 +240,17 @@ Now handling font encoding U ... defining Unicode char U+2423 (decimal 9251) )) defining Unicode char U+00A0 (decimal 160) -(/usr/share/texmf-texlive/tex/latex/base/fontenc.sty +(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty Package: fontenc 2005/09/27 v1.99g Standard LaTeX package -(/usr/share/texmf-texlive/tex/latex/base/t1enc.def +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file LaTeX Font Info: Redeclaring font encoding T1 on input line 43. -)) (/usr/share/texmf-texlive/tex/generic/babel/babel.sty -Package: babel 2008/07/06 v3.8l The Babel package -(/usr/share/texmf-texlive/tex/generic/babel/english.ldf +)) (/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2008/07/08 v3.8m The Babel package +(/usr/share/texlive/texmf-dist/tex/generic/babel/english.ldf Language: english 2005/03/30 v3.3o English support from the babel system -(/usr/share/texmf-texlive/tex/generic/babel/babel.def -File: babel.def 2008/07/06 v3.8l Babel common definitions +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2008/07/08 v3.8m Babel common definitions \babel@savecnt=\count88 \U@D=\dimen103 ) @@ -259,7 +259,7 @@ File: babel.def 2008/07/06 v3.8l Babel common definitions \l@canadian = a dialect from \language\l@american \l@australian = a dialect from \language\l@british \l@newzealand = a dialect from \language\l@british -)) (/usr/share/texmf-texlive/tex/latex/psnfss/times.sty +)) (/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty Package: times 2005/04/12 PSNFSS-v9.2a (SPQR) ) (./fncychap.sty Package: fncychap 2007/07/30 v1.34 LaTeX package (Revised chapters) @@ -272,7 +272,7 @@ Package: fncychap 2007/07/30 v1.34 LaTeX package (Revised chapters) \pxx=\skip49 \c@AlphaCnt=\count89 \c@AlphaDecCnt=\count90 -) (/usr/share/texmf-texlive/tex/latex/tools/longtable.sty +) (/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty Package: longtable 2004/02/01 v4.11 Multi-page Table package (DPC) \LTleft=\skip50 \LTright=\skip51 @@ -291,7 +291,7 @@ Package: longtable 2004/02/01 v4.11 Multi-page Table package (DPC) \LT@p@ftn=\toks16 ) (./sphinx.sty Package: sphinx 2010/01/15 LaTeX package (Sphinx markup) -(/usr/share/texmf-texlive/tex/latex/base/textcomp.sty +(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty Package: textcomp 2005/09/27 v1.99g Standard LaTeX package Package textcomp Info: Sub-encoding information: (textcomp) 5 = only ISO-Adobe without \textcurrency @@ -305,11 +305,11 @@ Package textcomp Info: Sub-encoding information: (textcomp) Family '?' is the default used for unknown fonts. (textcomp) See the documentation for details. Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 71. -(/usr/share/texmf-texlive/tex/latex/base/ts1enc.def +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file Now handling font encoding TS1 ... ... processing UTF-8 mapping file for font encoding TS1 -(/usr/share/texmf-texlive/tex/latex/base/ts1enc.dfu +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu File: ts1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc defining Unicode char U+00A2 (decimal 162) defining Unicode char U+00A3 (decimal 163) @@ -413,23 +413,37 @@ Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 307. Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 308. Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 309. Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 310. -Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 311. -Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 312. -Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 313. -Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 314. -Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 315. -Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 316. -Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 317. -Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 318. -Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 319. -Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 320. -Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 321. -Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 322. -Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 323. -Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 324. -Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 325. -Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 326. -) (/usr/share/texmf-texlive/tex/latex/fancyhdr/fancyhdr.sty +Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 311. +Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 312. +Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 313. +Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 314. +Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 315. +Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 316. +Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 317. +Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 318. +Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 319. +Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 320. +Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 321. +Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 322. +Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 323. +Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 324. +Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 325. +Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 326. +Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 327. +Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 328. +Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 329. +Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 330. +Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 331. +Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 332. +Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 333. +Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 334. +Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 335. +Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 336. +Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 337. +Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 338. +Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 339. +Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 340. +) (/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty \fancy@headwidth=\skip54 \f@ncyO@elh=\skip55 \f@ncyO@erh=\skip56 @@ -439,9 +453,9 @@ Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 326. \f@ncyO@erf=\skip60 \f@ncyO@olf=\skip61 \f@ncyO@orf=\skip62 -) (/usr/share/texmf-texlive/tex/latex/fancybox/fancybox.sty -Package: fancybox 2000/09/19 1.3 -Style option: `fancybox' v1.3 <2000/09/19> (tvz) +) (/usr/share/texlive/texmf-dist/tex/latex/fancybox/fancybox.sty +Package: fancybox 2010/05/15 1.4 +Style option: `fancybox' v1.4 <2010/05/15> (tvz) \@fancybox=\box30 \shadowsize=\dimen105 \@Sbox=\box31 @@ -451,8 +465,8 @@ Style option: `fancybox' v1.3 <2000/09/19> (tvz) \EndVerbatimTokens=\toks20 \Verbatim@Outfile=\write3 \Verbatim@Infile=\read1 -) (/usr/share/texmf-texlive/tex/latex/titlesec/titlesec.sty -Package: titlesec 2007/08/12 v2.8 Sectioning titles +) (/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty +Package: titlesec 2011/12/15 v2.10.0 Sectioning titles \ttl@box=\box32 \beforetitleunit=\skip63 \aftertitleunit=\skip64 @@ -464,7 +478,7 @@ Package: titlesec 2007/08/12 v2.8 Sectioning titles \titlewidthfirst=\dimen110 ) (./tabulary.sty Package: tabulary 2007/10/02 v0.9 tabulary package (DPC) -(/usr/share/texmf-texlive/tex/latex/tools/array.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty Package: array 2008/09/09 v2.4c Tabular extension package (FMi) \col@sep=\dimen111 \extrarowheight=\dimen112 @@ -477,20 +491,20 @@ Package: array 2008/09/09 v2.4c Tabular extension package (FMi) \tymin=\dimen114 \tymax=\dimen115 \TY@tablewidth=\dimen116 -) (/usr/share/texmf-texlive/tex/latex/amsmath/amsmath.sty +) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty Package: amsmath 2000/07/18 v2.13 AMS math features \@mathmargin=\skip67 For additional information on amsmath, use the `?' option. -(/usr/share/texmf-texlive/tex/latex/amsmath/amstext.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty Package: amstext 2000/06/29 v2.01 -(/usr/share/texmf-texlive/tex/latex/amsmath/amsgen.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty File: amsgen.sty 1999/11/30 v2.0 \@emptytoks=\toks23 \ex@=\dimen117 -)) (/usr/share/texmf-texlive/tex/latex/amsmath/amsbsy.sty +)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty Package: amsbsy 1999/11/29 v1.2d \pmbraise@=\dimen118 -) (/usr/share/texmf-texlive/tex/latex/amsmath/amsopn.sty +) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty Package: amsopn 1999/12/14 v2.01 operator names ) \inf@bad=\count97 @@ -530,30 +544,36 @@ LaTeX Font Info: Redeclaring font encoding OMS on input line 568. \mathdisplay@stack=\toks27 LaTeX Info: Redefining \[ on input line 2666. LaTeX Info: Redefining \] on input line 2667. -) (/usr/share/texmf-texlive/tex/latex/base/makeidx.sty +) (/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty Package: makeidx 2000/03/29 v1.0m Standard LaTeX package -) (/usr/share/texmf-texlive/tex/latex/ltxmisc/framed.sty -Package: framed 2007/10/04 v 0.95: framed or shaded text with page breaks +) (/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty +Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks +\OuterFrameSep=\skip70 \fb@frw=\dimen126 \fb@frh=\dimen127 \FrameRule=\dimen128 \FrameSep=\dimen129 -) (/usr/share/texmf-texlive/tex/latex/base/ifthen.sty +) (/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty Package: ifthen 2001/05/26 v1.1c Standard LaTeX ifthen package (DPC) -) (/usr/share/texmf-texlive/tex/latex/graphics/color.sty +) (/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty Package: color 2005/11/14 v1.0j Standard LaTeX Color (DPC) -(/etc/texmf/tex/latex/config/color.cfg +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive ) Package color Info: Driver file: pdftex.def on input line 130. -(/usr/share/texmf-texlive/tex/latex/pdftex-def/pdftex.def -File: pdftex.def 2010/03/12 v0.04p Graphics/color for pdfTeX +(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def +File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) +) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) +) \Gread@gobject=\count109 -)) (/usr/share/texmf-texlive/tex/latex/fancyvrb/fancyvrb.sty +)) (/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty Package: fancyvrb 2008/02/07 Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix -<2008/02/07> (tvz) (/usr/share/texmf-texlive/tex/latex/graphics/keyval.sty +<2008/02/07> (tvz) (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty Package: keyval 1999/03/16 v1.13 key=value parser (DPC) \KV@toks@=\toks28 ) @@ -563,143 +583,153 @@ Package: keyval 1999/03/16 v1.13 key=value parser (DPC) \c@FancyVerbLine=\count111 \FV@StepNumber=\count112 \FV@OutFile=\write4 -) (/usr/share/texmf-texlive/tex/latex/ltxmisc/threeparttable.sty +) (/usr/share/texlive/texmf-dist/tex/latex/threeparttable/threeparttable.sty Package: threeparttable 2003/06/13 v 3.0 \@tempboxb=\box36 -) (/usr/share/texmf-texlive/tex/latex/mdwtools/footnote.sty +) (/usr/share/texlive/texmf-dist/tex/latex/mdwtools/footnote.sty Package: footnote 1997/01/28 1.13 Save footnotes around boxes \fn@notes=\box37 \fn@width=\dimen130 -) (/usr/share/texmf-texlive/tex/latex/wrapfig/wrapfig.sty +) (/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty \wrapoverhang=\dimen131 \WF@size=\dimen132 \c@WF@wrappedlines=\count113 \WF@box=\box38 \WF@everypar=\toks29 Package: wrapfig 2003/01/31 v 3.6 -) (/usr/share/texmf-texlive/tex/latex/ltxmisc/parskip.sty +) (/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty Package: parskip 2001/04/09 non-zero parskip adjustments -) (/usr/share/texmf-texlive/tex/latex/graphics/graphicx.sty +) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) -(/usr/share/texmf-texlive/tex/latex/graphics/graphics.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) -(/usr/share/texmf-texlive/tex/latex/graphics/trig.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty Package: trig 1999/03/16 v1.09 sin cos tan (DPC) -) (/etc/texmf/tex/latex/config/graphics.cfg -File: graphics.cfg 2009/08/28 v1.8 graphics configuration of TeX Live +) (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg +File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live ) Package graphics Info: Driver file: pdftex.def on input line 91. ) \Gin@req@height=\dimen133 \Gin@req@width=\dimen134 -) (/usr/share/texmf-texlive/tex/plain/misc/pdfcolor.tex) -\distancetoright=\skip70 -\py@argswidth=\skip71 -\py@noticelength=\skip72 -\lineblockindentation=\skip73 +) (/usr/share/texlive/texmf-dist/tex/plain/misc/pdfcolor.tex) +\distancetoright=\skip71 +\py@argswidth=\skip72 +\py@noticelength=\skip73 +\lineblockindentation=\skip74 \image@box=\box39 \image@width=\dimen135 -(/usr/share/texmf-texlive/tex/latex/hyperref/hyperref.sty -Package: hyperref 2009/10/09 v6.79a Hypertext links for LaTeX -(/usr/share/texmf-texlive/tex/generic/oberdiek/ifpdf.sty -Package: ifpdf 2009/04/10 v2.0 Provides the ifpdf switch (HO) -Package ifpdf Info: pdfTeX in pdf mode detected. -) (/usr/share/texmf-texlive/tex/generic/oberdiek/ifvtex.sty -Package: ifvtex 2008/11/04 v1.4 Switches for detecting VTeX and its modes (HO) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2012/05/13 v6.82q Hypertext links for LaTeX +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) +Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) +Package hobsub Info: Skipping package `infwarerr' (already loaded). +Package hobsub Info: Skipping package `ltxcmds' (already loaded). +Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX not detected. +Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) Package ifvtex Info: VTeX not detected. -) (/usr/share/texmf-texlive/tex/generic/ifxetex/ifxetex.sty -Package: ifxetex 2009/01/23 v0.5 Provides ifxetex conditional -) (/usr/share/texmf-texlive/tex/latex/oberdiek/hycolor.sty -Package: hycolor 2009/10/02 v1.5 Code for color options of hyperref/bookmark (H -O) -(/usr/share/texmf-texlive/tex/latex/oberdiek/xcolor-patch.sty -Package: xcolor-patch 2009/10/02 xcolor patch -)) +Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) +Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) +Package ifpdf Info: pdfTeX in PDF mode is detected. +Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) +Package etexcmds Info: Could not find \expanded. +(etexcmds) That can mean that you are not using pdfTeX 1.50 or +(etexcmds) that some package has redefined \expanded. +(etexcmds) In the latter case, load this package earlier. +Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) +Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) +Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO +) +Package pdftexcmds Info: LuaTeX not detected. +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) +Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO +) +Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) +Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) +) +Package hobsub Info: Skipping package `hobsub' (already loaded). +Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) +Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) +Package: xcolor-patch 2011/01/30 xcolor patch +Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) +Package atveryend Info: \enddocument detected (standard20110627). +Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) +Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) +Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) +) (/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) +) \@linkdim=\dimen136 \Hy@linkcounter=\count114 \Hy@pagecounter=\count115 -(/usr/share/texmf-texlive/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2009/10/09 v6.79a Hyperref: PDFDocEncoding definition (HO) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2012/05/13 v6.82q Hyperref: PDFDocEncoding definition (HO) Now handling font encoding PD1 ... ... no UTF-8 mapping file for font encoding PD1 -) (/usr/share/texmf-texlive/tex/generic/oberdiek/etexcmds.sty -Package: etexcmds 2007/12/12 v1.2 Prefix for e-TeX command names (HO) -(/usr/share/texmf-texlive/tex/generic/oberdiek/infwarerr.sty -Package: infwarerr 2007/09/09 v1.2 Providing info/warning/message (HO) ) -Package etexcmds Info: Could not find \expanded. -(etexcmds) That can mean that you are not using pdfTeX 1.50 or -(etexcmds) that some package has redefined \expanded. -(etexcmds) In the latter case, load this package earlier. -) (/usr/share/texmf-texlive/tex/latex/latexconfig/hyperref.cfg +\Hy@SavedSpaceFactor=\count116 +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive -) (/usr/share/texmf-texlive/tex/latex/oberdiek/kvoptions.sty -Package: kvoptions 2009/08/13 v3.4 Keyval support for LaTeX options (HO) -(/usr/share/texmf-texlive/tex/generic/oberdiek/kvsetkeys.sty -Package: kvsetkeys 2009/07/30 v1.5 Key value parser with default handler suppor -t (HO) -)) -Package hyperref Info: Option `colorlinks' set `true' on input line 2864. -Package hyperref Info: Option `breaklinks' set `true' on input line 2864. -Package hyperref Info: Hyper figures OFF on input line 2975. -Package hyperref Info: Link nesting OFF on input line 2980. -Package hyperref Info: Hyper index ON on input line 2983. -Package hyperref Info: Plain pages OFF on input line 2990. -Package hyperref Info: Backreferencing OFF on input line 2995. -Implicit mode ON; LaTeX internals redefined -Package hyperref Info: Bookmarks ON on input line 3191. -(/usr/share/texmf-texlive/tex/latex/ltxmisc/url.sty +) +Package hyperref Info: Option `colorlinks' set `true' on input line 3941. +Package hyperref Info: Option `breaklinks' set `true' on input line 3941. +Package hyperref Info: Hyper figures OFF on input line 4062. +Package hyperref Info: Link nesting OFF on input line 4067. +Package hyperref Info: Hyper index ON on input line 4070. +Package hyperref Info: Plain pages OFF on input line 4077. +Package hyperref Info: Backreferencing OFF on input line 4082. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4300. +\c@Hy@tempcnt=\count117 +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty \Urlmuskip=\muskip11 Package: url 2006/04/12 ver 3.3 Verb mode for urls, etc. ) -LaTeX Info: Redefining \url on input line 3428. -(/usr/share/texmf-texlive/tex/generic/oberdiek/bitset.sty -Package: bitset 2007/09/28 v1.0 Data type bit set (HO) -(/usr/share/texmf-texlive/tex/generic/oberdiek/intcalc.sty -Package: intcalc 2007/09/27 v1.1 Expandable integer calculations (HO) -) (/usr/share/texmf-texlive/tex/generic/oberdiek/bigintcalc.sty -Package: bigintcalc 2007/11/11 v1.1 Expandable big integer calculations (HO) -(/usr/share/texmf-texlive/tex/generic/oberdiek/pdftexcmds.sty -Package: pdftexcmds 2009/09/23 v0.6 LuaTeX support for pdfTeX utility functions - (HO) -(/usr/share/texmf-texlive/tex/generic/oberdiek/ifluatex.sty -Package: ifluatex 2009/04/17 v1.2 Provides the ifluatex switch (HO) -Package ifluatex Info: LuaTeX not detected. -) (/usr/share/texmf-texlive/tex/generic/oberdiek/ltxcmds.sty -Package: ltxcmds 2009/08/05 v1.0 Some LaTeX kernel commands for general use (HO -) -) -Package pdftexcmds Info: LuaTeX not detected. -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -))) -\Fld@menulength=\count116 +LaTeX Info: Redefining \url on input line 4653. +\Fld@menulength=\count118 \Field@Width=\dimen137 \Fld@charsize=\dimen138 -\Field@toks=\toks30 -Package hyperref Info: Hyper figures OFF on input line 4377. -Package hyperref Info: Link nesting OFF on input line 4382. -Package hyperref Info: Hyper index ON on input line 4385. -Package hyperref Info: backreferencing OFF on input line 4392. -Package hyperref Info: Link coloring ON on input line 4395. -Package hyperref Info: Link coloring with OCG OFF on input line 4402. -Package hyperref Info: PDF/A mode OFF on input line 4407. -(/usr/share/texmf-texlive/tex/generic/oberdiek/atbegshi.sty -Package: atbegshi 2008/07/31 v1.9 At begin shipout hook (HO) +Package hyperref Info: Hyper figures OFF on input line 5773. +Package hyperref Info: Link nesting OFF on input line 5778. +Package hyperref Info: Hyper index ON on input line 5781. +Package hyperref Info: backreferencing OFF on input line 5788. +Package hyperref Info: Link coloring ON on input line 5791. +Package hyperref Info: Link coloring with OCG OFF on input line 5798. +Package hyperref Info: PDF/A mode OFF on input line 5803. +LaTeX Info: Redefining \ref on input line 5843. +LaTeX Info: Redefining \pageref on input line 5847. +\Hy@abspage=\count119 +\c@Item=\count120 +\c@Hfootnote=\count121 ) -\Hy@abspage=\count117 -\c@Item=\count118 -\c@Hfootnote=\count119 + +Package hyperref Message: Driver (autodetected): hpdftex. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2012/05/13 v6.82q Hyperref driver for pdfTeX +\Fld@listcount=\count122 +\c@bookmark@seq@number=\count123 +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +82. ) -*hyperref using default driver hpdftex* -(/usr/share/texmf-texlive/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2009/10/09 v6.79a Hyperref driver for pdfTeX -\Fld@listcount=\count120 -) (/usr/share/texmf-texlive/tex/latex/oberdiek/hypcap.sty -Package: hypcap 2008/09/08 v1.10 Adjusting anchors of captions (HO) +\Hy@SectionHShift=\skip75 +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty +Package: hypcap 2011/02/16 v1.11 Adjusting the anchors of captions (HO) ) -\DUlineblockindent=\skip74 -) (/usr/share/texmf-texlive/tex/latex/multirow/multirow.sty +\DUlineblockindent=\skip76 +) (/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty \bigstrutjot=\dimen139 ) \@indexfile=\write5 @@ -724,50 +754,64 @@ LaTeX Font Info: ... okay on input line 113. LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 113. LaTeX Font Info: Try loading font information for TS1+cmr on input line 113. -(/usr/share/texmf-texlive/tex/latex/base/ts1cmr.fd +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions ) LaTeX Font Info: ... okay on input line 113. LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 113. LaTeX Font Info: ... okay on input line 113. LaTeX Font Info: Try loading font information for T1+ptm on input line 113. -(/usr/share/texmf-texlive/tex/latex/psnfss/t1ptm.fd +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd File: t1ptm.fd 2001/06/04 font definitions for T1/ptm. -) (/usr/share/texmf-texlive/tex/context/base/supp-pdf.mkii +) (/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii [Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count121 +\scratchcounter=\count124 \scratchdimen=\dimen140 \scratchbox=\box40 -\nofMPsegments=\count122 -\nofMParguments=\count123 -\everyMPshowfont=\toks31 -\MPscratchCnt=\count124 +\nofMPsegments=\count125 +\nofMParguments=\count126 +\everyMPshowfont=\toks30 +\MPscratchCnt=\count127 \MPscratchDim=\dimen141 -\MPnumerator=\count125 -\everyMPtoPDFconversion=\toks32 +\MPnumerator=\count128 +\makeMPintoPDFobject=\count129 +\everyMPtoPDFconversion=\toks31 +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) ) +Package grfext Info: Graphics extension search list: +(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 452. +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +\AtBeginShipoutBox=\box41 Package hyperref Info: Link coloring ON on input line 113. -(/usr/share/texmf-texlive/tex/latex/hyperref/nameref.sty -Package: nameref 2007/05/29 v2.31 Cross-referencing by name of section -(/usr/share/texmf-texlive/tex/latex/oberdiek/refcount.sty -Package: refcount 2008/08/11 v3.1 Data extraction from references (HO) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2010/04/30 v2.40 Cross-referencing by name of section +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) ) -\c@section@level=\count126 +\c@section@level=\count130 ) LaTeX Info: Redefining \ref on input line 113. LaTeX Info: Redefining \pageref on input line 113. +LaTeX Info: Redefining \nameref on input line 113. (./manual.out) (./manual.out) \@outlinefile=\write6 \openout6 = `manual.out'. -\AtBeginShipoutBox=\box41 Underfull \hbox (badness 10000) in paragraph at lines 116--116 [] LaTeX Font Info: Try loading font information for T1+phv on input line 116. -(/usr/share/texmf-texlive/tex/latex/psnfss/t1phv.fd +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd File: t1phv.fd 2001/06/04 scalable font definitions for T1/phv. ) LaTeX Font Info: Font shape `T1/phv/bx/n' in size <24.88> not available @@ -785,11 +829,228 @@ LaTeX Font Info: Font shape `T1/phv/bx/n' in size <17.28> not available {/home/nikratio/.texmf-var/fonts/map/pdftex/updmap/pdftex.map pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma -p/pdftex.map): fontmap entry for `ugqb8r' already exists, duplicates ignored +p/pdftex.map): ambiguous entry for `/.notdef': font file present but not includ +ed, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/Agrave': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/Egrave': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/Eth': font file present but not included, +will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/Igrave': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/OE': font file present but not included, w +ill be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/Ocircumflex': font file present but not in +cluded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/Oslash': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/P': font file present but not included, wi +ll be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/Udieresis': font file present but not incl +uded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/X': font file present but not included, wi +ll be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/acute': font file present but not included +, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/adieresis': font file present but not incl +uded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/agrave': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/at': font file present but not included, w +ill be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/breve': font file present but not included +, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/cedilla': font file present but not includ +ed, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/circumflex': font file present but not inc +luded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/currency': font file present but not inclu +ded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/degree': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/dieresis': font file present but not inclu +ded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/dollar': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/dotlessj': font file present but not inclu +ded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/egrave': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/eight': font file present but not included +, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/eth': font file present but not included, +will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/exclamdown': font file present but not inc +luded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/fraction': font file present but not inclu +ded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/hyphen': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/igrave': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/ocircumflex': font file present but not in +cluded, will be treated as font file not present pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma -p/pdftex.map): fontmap entry for `ugqbo8r' already exists, duplicates ignored +p/pdftex.map): ambiguous entry for `/oe': font file present but not included, w +ill be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/ogonek': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/onequarter': font file present but not inc +luded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/oslash': font file present but not include +d, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/p': font file present but not included, wi +ll be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/parenleft': font file present but not incl +uded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/quotedblbase': font file present but not i +ncluded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/quotedblright': font file present but not +included, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/quoteleft': font file present but not incl +uded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/space': font file present but not included +, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/tilde': font file present but not included +, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/udieresis': font file present but not incl +uded, will be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/x': font file present but not included, wi +ll be treated as font file not present + + +pdfTeX warning: pdflatex (file /home/nikratio/.texmf-var/fonts/map/pdftex/updma +p/pdftex.map): ambiguous entry for `/zero': font file present but not included, + will be treated as font file not present }] [2 ] (./manual.toc @@ -819,7 +1080,7 @@ LaTeX Font Info: Font shape `T1/phv/bx/n' in size <14.4> not available (Font) Font shape `T1/phv/b/n' tried instead on input line 121. LaTeX Font Info: Try loading font information for TS1+ptm on input line 143. -(/usr/share/texmf-texlive/tex/latex/psnfss/ts1ptm.fd +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd File: ts1ptm.fd 2001/06/04 font definitions for TS1/ptm. ) [1 @@ -827,7 +1088,7 @@ File: ts1ptm.fd 2001/06/04 font definitions for TS1/ptm. ] [2] Chapter 2. LaTeX Font Info: Try loading font information for T1+pcr on input line 249. -(/usr/share/texmf-texlive/tex/latex/psnfss/t1pcr.fd +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd File: t1pcr.fd 2001/06/04 font definitions for T1/pcr. ) [3 @@ -897,7 +1158,7 @@ Chapter 9. ] Chapter 10. -Underfull \hbox (badness 10000) in paragraph at lines 1462--1464 +Underfull \hbox (badness 10000) in paragraph at lines 1457--1459 []\T1/ptm/m/n/10 Read au-then-ti-ca-tion cre-den-tials from this file (de-fault : [] @@ -911,7 +1172,7 @@ Chapter 12. [31 ] -Underfull \hbox (badness 10000) in paragraph at lines 1673--1678 +Underfull \hbox (badness 10000) in paragraph at lines 1668--1673 []\T1/ptm/b/n/10 expire_backups \T1/ptm/m/n/10 us-age is sim-ple. It re-quires back-ups to have names of the forms [] @@ -927,7 +1188,7 @@ Chapter 14. ] [38] Chapter 15. -Underfull \hbox (badness 10000) in paragraph at lines 1928--1930 +Underfull \hbox (badness 10000) in paragraph at lines 1923--1925 []\T1/ptm/m/n/10 Read au-then-ti-ca-tion cre-den-tials from this file (de-fault : [] @@ -935,25 +1196,25 @@ Underfull \hbox (badness 10000) in paragraph at lines 1928--1930 [39 ] -Underfull \hbox (badness 10000) in paragraph at lines 2012--2014 +Underfull \hbox (badness 10000) in paragraph at lines 2007--2009 []\T1/ptm/m/n/10 Read au-then-ti-ca-tion cre-den-tials from this file (de-fault : [] [40] [41] -Underfull \hbox (badness 10000) in paragraph at lines 2096--2098 +Underfull \hbox (badness 10000) in paragraph at lines 2091--2093 []\T1/ptm/m/n/10 Read au-then-ti-ca-tion cre-den-tials from this file (de-fault : [] [42] [43] [44] [45] [46] [47] [48] -Underfull \hbox (badness 10000) in paragraph at lines 2666--2668 +Underfull \hbox (badness 10000) in paragraph at lines 2656--2658 []\T1/ptm/m/n/10 Read au-then-ti-ca-tion cre-den-tials from this file (de-fault : [] [49] [50] -Underfull \hbox (badness 10000) in paragraph at lines 2814--2819 +Underfull \hbox (badness 10000) in paragraph at lines 2804--2809 []\T1/ptm/b/n/10 expire_backups \T1/ptm/m/n/10 us-age is sim-ple. It re-quires back-ups to have names of the forms [] @@ -967,43 +1228,54 @@ Chapter 16. ] Chapter 17. [55] -Underfull \hbox (badness 10000) in paragraph at lines 2983--2988 +Underfull \hbox (badness 10000) in paragraph at lines 2973--2978 \T1/ptm/m/n/10 S3QL has to take into ac-count that changes in ob-jects do not p rop-a-gate im-me-di-ately in all [] -Underfull \hbox (badness 10000) in paragraph at lines 2983--2988 +Underfull \hbox (badness 10000) in paragraph at lines 2973--2978 \T1/ptm/m/n/10 back-ends. For ex-am-ple, when an Ama-zon S3 ob-ject is up-loade d and im-me-di-ately down-loaded [] -Underfull \hbox (badness 10000) in paragraph at lines 2983--2988 +Underfull \hbox (badness 10000) in paragraph at lines 2973--2978 \T1/ptm/m/n/10 again, the down-loaded data might not yet re-flect the changes d one in the up-load (see also [] No file manual.ind. -[56] (./manual.aux) ) +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 3027. +[56] +Package atveryend Info: Empty hook `AfterLastShipout' on input line 3027. +(./manual.aux) +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 3027. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 3027. + +Package rerunfilecheck Info: File `manual.out' has not changed. +(rerunfilecheck) Checksum: ED25948C1D6AC523DA73C378D944AA01;4440. +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 3027. + ) Here is how much of TeX's memory you used: - 8390 strings out of 495021 - 114321 string characters out of 1181036 - 201851 words of memory out of 3000000 - 11159 multiletter control sequences out of 15000+50000 + 9255 strings out of 495007 + 128728 string characters out of 3179691 + 229413 words of memory out of 3000000 + 12045 multiletter control sequences out of 15000+200000 58515 words of font info for 65 fonts, out of 3000000 for 9000 - 29 hyphenation exceptions out of 8191 - 45i,12n,49p,296b,469s stack positions out of 5000i,500n,10000p,200000b,50000s -{/usr/share/texmf-texlive/fonts/enc/dvips/base/8r.enc}</us -r/share/texmf-texlive/fonts/type1/urw/courier/ucrr8a.pfb></usr/share/texmf-texl -ive/fonts/type1/urw/courier/ucrro8a.pfb></usr/share/texmf-texlive/fonts/type1/u -rw/helvetic/uhvb8a.pfb></usr/share/texmf-texlive/fonts/type1/urw/helvetic/uhvbo -8a.pfb></usr/share/texmf-texlive/fonts/type1/urw/times/utmb8a.pfb></usr/share/t -exmf-texlive/fonts/type1/urw/times/utmr8a.pfb></usr/share/texmf-texlive/fonts/t -ype1/urw/times/utmri8a.pfb> -Output written on manual.pdf (60 pages, 310875 bytes). + 15 hyphenation exceptions out of 8191 + 37i,12n,49p,248b,470s stack positions out of 5000i,500n,10000p,200000b,50000s +{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}</usr/share/texliv +e/texmf-dist/fonts/type1/urw/courier/ucrr8a.pfb></usr/share/texlive/texmf-dist/ +fonts/type1/urw/courier/ucrro8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/ +urw/helvetic/uhvb8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic +/uhvbo8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb></ +usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></usr/share/texli +ve/texmf-dist/fonts/type1/urw/times/utmri8a.pfb> +Output written on manual.pdf (60 pages, 225680 bytes). PDF statistics: - 889 PDF objects out of 1000 (max. 8388607) + 899 PDF objects out of 1000 (max. 8388607) + 821 compressed objects within 9 object streams 230 named destinations out of 1000 (max. 500000) 561 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/doc/latex/manual.out b/doc/latex/manual.out index 8e969ec..481b844 100644 --- a/doc/latex/manual.out +++ b/doc/latex/manual.out @@ -1,70 +1,70 @@ -\BOOKMARK [0][-]{chapter.1}{About S3QL}{} -\BOOKMARK [1][-]{section.1.1}{Features}{chapter.1} -\BOOKMARK [1][-]{section.1.2}{Development Status}{chapter.1} -\BOOKMARK [0][-]{chapter.2}{Installation}{} -\BOOKMARK [1][-]{section.2.1}{Dependencies}{chapter.2} -\BOOKMARK [1][-]{section.2.2}{Installing S3QL}{chapter.2} -\BOOKMARK [0][-]{chapter.3}{Storage Backends}{} -\BOOKMARK [1][-]{section.3.1}{Google Storage}{chapter.3} -\BOOKMARK [1][-]{section.3.2}{Amazon S3}{chapter.3} -\BOOKMARK [1][-]{section.3.3}{OpenStack/Swift}{chapter.3} -\BOOKMARK [1][-]{section.3.4}{RackSpace CloudFiles}{chapter.3} -\BOOKMARK [1][-]{section.3.5}{S3 compatible}{chapter.3} -\BOOKMARK [1][-]{section.3.6}{Local}{chapter.3} -\BOOKMARK [0][-]{chapter.4}{Important Rules to Avoid Losing Data}{} -\BOOKMARK [1][-]{section.4.1}{Rules in a Nutshell}{chapter.4} -\BOOKMARK [1][-]{section.4.2}{Consistency Window List}{chapter.4} -\BOOKMARK [1][-]{section.4.3}{Data Consistency}{chapter.4} -\BOOKMARK [1][-]{section.4.4}{Data Durability}{chapter.4} -\BOOKMARK [0][-]{chapter.5}{File System Creation}{} -\BOOKMARK [0][-]{chapter.6}{Managing File Systems}{} -\BOOKMARK [1][-]{section.6.1}{Changing the Passphrase}{chapter.6} -\BOOKMARK [1][-]{section.6.2}{Upgrading the file system}{chapter.6} -\BOOKMARK [1][-]{section.6.3}{Deleting a file system}{chapter.6} -\BOOKMARK [1][-]{section.6.4}{Restoring Metadata Backups}{chapter.6} -\BOOKMARK [0][-]{chapter.7}{Mounting}{} -\BOOKMARK [1][-]{section.7.1}{Compression Algorithms}{chapter.7} -\BOOKMARK [1][-]{section.7.2}{Notes about Caching}{chapter.7} -\BOOKMARK [1][-]{section.7.3}{Automatic Mounting}{chapter.7} -\BOOKMARK [0][-]{chapter.8}{Advanced S3QL Features}{} -\BOOKMARK [1][-]{section.8.1}{Snapshotting and Copy-on-Write}{chapter.8} -\BOOKMARK [1][-]{section.8.2}{Getting Statistics}{chapter.8} -\BOOKMARK [1][-]{section.8.3}{Immutable Trees}{chapter.8} -\BOOKMARK [1][-]{section.8.4}{Fast Recursive Removal}{chapter.8} -\BOOKMARK [1][-]{section.8.5}{Runtime Configuration}{chapter.8} -\BOOKMARK [0][-]{chapter.9}{Unmounting}{} -\BOOKMARK [0][-]{chapter.10}{Checking for Errors}{} -\BOOKMARK [0][-]{chapter.11}{Storing Authentication Information}{} -\BOOKMARK [0][-]{chapter.12}{Contributed Programs}{} -\BOOKMARK [1][-]{section.12.1}{benchmark.py}{chapter.12} -\BOOKMARK [1][-]{section.12.2}{s3\137copy.py}{chapter.12} -\BOOKMARK [1][-]{section.12.3}{pcp.py}{chapter.12} -\BOOKMARK [1][-]{section.12.4}{s3\137backup.sh}{chapter.12} -\BOOKMARK [1][-]{section.12.5}{expire\137backups.py}{chapter.12} -\BOOKMARK [1][-]{section.12.6}{s3ql\137upstart.conf}{chapter.12} -\BOOKMARK [0][-]{chapter.13}{Tips \046 Tricks}{} -\BOOKMARK [1][-]{section.13.1}{SSH Backend}{chapter.13} -\BOOKMARK [1][-]{section.13.2}{Permanently mounted backup file system}{chapter.13} -\BOOKMARK [1][-]{section.13.3}{Improving copy performance}{chapter.13} -\BOOKMARK [0][-]{chapter.14}{Known Issues}{} -\BOOKMARK [0][-]{chapter.15}{Manpages}{} -\BOOKMARK [1][-]{section.15.1}{The mkfs.s3ql command}{chapter.15} -\BOOKMARK [1][-]{section.15.2}{The s3qladm command}{chapter.15} -\BOOKMARK [1][-]{section.15.3}{The mount.s3ql command}{chapter.15} -\BOOKMARK [1][-]{section.15.4}{The s3qlstat command}{chapter.15} -\BOOKMARK [1][-]{section.15.5}{The s3qlctrl command}{chapter.15} -\BOOKMARK [1][-]{section.15.6}{The s3qlcp command}{chapter.15} -\BOOKMARK [1][-]{section.15.7}{The s3qlrm command}{chapter.15} -\BOOKMARK [1][-]{section.15.8}{The s3qllock command}{chapter.15} -\BOOKMARK [1][-]{section.15.9}{The umount.s3ql command}{chapter.15} -\BOOKMARK [1][-]{section.15.10}{The fsck.s3ql command}{chapter.15} -\BOOKMARK [1][-]{section.15.11}{The pcp command}{chapter.15} -\BOOKMARK [1][-]{section.15.12}{The expire\137backups command}{chapter.15} -\BOOKMARK [0][-]{chapter.16}{Further Resources / Getting Help}{} -\BOOKMARK [0][-]{chapter.17}{Implementation Details}{} -\BOOKMARK [1][-]{section.17.1}{Metadata Storage}{chapter.17} -\BOOKMARK [1][-]{section.17.2}{Data Storage}{chapter.17} -\BOOKMARK [1][-]{section.17.3}{Data De-Duplication}{chapter.17} -\BOOKMARK [1][-]{section.17.4}{Caching}{chapter.17} -\BOOKMARK [1][-]{section.17.5}{Eventual Consistency Handling}{chapter.17} -\BOOKMARK [1][-]{section.17.6}{Encryption}{chapter.17} +\BOOKMARK [0][-]{chapter.1}{About S3QL}{}% 1 +\BOOKMARK [1][-]{section.1.1}{Features}{chapter.1}% 2 +\BOOKMARK [1][-]{section.1.2}{Development Status}{chapter.1}% 3 +\BOOKMARK [0][-]{chapter.2}{Installation}{}% 4 +\BOOKMARK [1][-]{section.2.1}{Dependencies}{chapter.2}% 5 +\BOOKMARK [1][-]{section.2.2}{Installing S3QL}{chapter.2}% 6 +\BOOKMARK [0][-]{chapter.3}{Storage Backends}{}% 7 +\BOOKMARK [1][-]{section.3.1}{Google Storage}{chapter.3}% 8 +\BOOKMARK [1][-]{section.3.2}{Amazon S3}{chapter.3}% 9 +\BOOKMARK [1][-]{section.3.3}{OpenStack/Swift}{chapter.3}% 10 +\BOOKMARK [1][-]{section.3.4}{RackSpace CloudFiles}{chapter.3}% 11 +\BOOKMARK [1][-]{section.3.5}{S3 compatible}{chapter.3}% 12 +\BOOKMARK [1][-]{section.3.6}{Local}{chapter.3}% 13 +\BOOKMARK [0][-]{chapter.4}{Important Rules to Avoid Losing Data}{}% 14 +\BOOKMARK [1][-]{section.4.1}{Rules in a Nutshell}{chapter.4}% 15 +\BOOKMARK [1][-]{section.4.2}{Consistency Window List}{chapter.4}% 16 +\BOOKMARK [1][-]{section.4.3}{Data Consistency}{chapter.4}% 17 +\BOOKMARK [1][-]{section.4.4}{Data Durability}{chapter.4}% 18 +\BOOKMARK [0][-]{chapter.5}{File System Creation}{}% 19 +\BOOKMARK [0][-]{chapter.6}{Managing File Systems}{}% 20 +\BOOKMARK [1][-]{section.6.1}{Changing the Passphrase}{chapter.6}% 21 +\BOOKMARK [1][-]{section.6.2}{Upgrading the file system}{chapter.6}% 22 +\BOOKMARK [1][-]{section.6.3}{Deleting a file system}{chapter.6}% 23 +\BOOKMARK [1][-]{section.6.4}{Restoring Metadata Backups}{chapter.6}% 24 +\BOOKMARK [0][-]{chapter.7}{Mounting}{}% 25 +\BOOKMARK [1][-]{section.7.1}{Compression Algorithms}{chapter.7}% 26 +\BOOKMARK [1][-]{section.7.2}{Notes about Caching}{chapter.7}% 27 +\BOOKMARK [1][-]{section.7.3}{Automatic Mounting}{chapter.7}% 28 +\BOOKMARK [0][-]{chapter.8}{Advanced S3QL Features}{}% 29 +\BOOKMARK [1][-]{section.8.1}{Snapshotting and Copy-on-Write}{chapter.8}% 30 +\BOOKMARK [1][-]{section.8.2}{Getting Statistics}{chapter.8}% 31 +\BOOKMARK [1][-]{section.8.3}{Immutable Trees}{chapter.8}% 32 +\BOOKMARK [1][-]{section.8.4}{Fast Recursive Removal}{chapter.8}% 33 +\BOOKMARK [1][-]{section.8.5}{Runtime Configuration}{chapter.8}% 34 +\BOOKMARK [0][-]{chapter.9}{Unmounting}{}% 35 +\BOOKMARK [0][-]{chapter.10}{Checking for Errors}{}% 36 +\BOOKMARK [0][-]{chapter.11}{Storing Authentication Information}{}% 37 +\BOOKMARK [0][-]{chapter.12}{Contributed Programs}{}% 38 +\BOOKMARK [1][-]{section.12.1}{benchmark.py}{chapter.12}% 39 +\BOOKMARK [1][-]{section.12.2}{s3\137copy.py}{chapter.12}% 40 +\BOOKMARK [1][-]{section.12.3}{pcp.py}{chapter.12}% 41 +\BOOKMARK [1][-]{section.12.4}{s3\137backup.sh}{chapter.12}% 42 +\BOOKMARK [1][-]{section.12.5}{expire\137backups.py}{chapter.12}% 43 +\BOOKMARK [1][-]{section.12.6}{s3ql\137upstart.conf}{chapter.12}% 44 +\BOOKMARK [0][-]{chapter.13}{Tips \046 Tricks}{}% 45 +\BOOKMARK [1][-]{section.13.1}{SSH Backend}{chapter.13}% 46 +\BOOKMARK [1][-]{section.13.2}{Permanently mounted backup file system}{chapter.13}% 47 +\BOOKMARK [1][-]{section.13.3}{Improving copy performance}{chapter.13}% 48 +\BOOKMARK [0][-]{chapter.14}{Known Issues}{}% 49 +\BOOKMARK [0][-]{chapter.15}{Manpages}{}% 50 +\BOOKMARK [1][-]{section.15.1}{The mkfs.s3ql command}{chapter.15}% 51 +\BOOKMARK [1][-]{section.15.2}{The s3qladm command}{chapter.15}% 52 +\BOOKMARK [1][-]{section.15.3}{The mount.s3ql command}{chapter.15}% 53 +\BOOKMARK [1][-]{section.15.4}{The s3qlstat command}{chapter.15}% 54 +\BOOKMARK [1][-]{section.15.5}{The s3qlctrl command}{chapter.15}% 55 +\BOOKMARK [1][-]{section.15.6}{The s3qlcp command}{chapter.15}% 56 +\BOOKMARK [1][-]{section.15.7}{The s3qlrm command}{chapter.15}% 57 +\BOOKMARK [1][-]{section.15.8}{The s3qllock command}{chapter.15}% 58 +\BOOKMARK [1][-]{section.15.9}{The umount.s3ql command}{chapter.15}% 59 +\BOOKMARK [1][-]{section.15.10}{The fsck.s3ql command}{chapter.15}% 60 +\BOOKMARK [1][-]{section.15.11}{The pcp command}{chapter.15}% 61 +\BOOKMARK [1][-]{section.15.12}{The expire\137backups command}{chapter.15}% 62 +\BOOKMARK [0][-]{chapter.16}{Further Resources / Getting Help}{}% 63 +\BOOKMARK [0][-]{chapter.17}{Implementation Details}{}% 64 +\BOOKMARK [1][-]{section.17.1}{Metadata Storage}{chapter.17}% 65 +\BOOKMARK [1][-]{section.17.2}{Data Storage}{chapter.17}% 66 +\BOOKMARK [1][-]{section.17.3}{Data De-Duplication}{chapter.17}% 67 +\BOOKMARK [1][-]{section.17.4}{Caching}{chapter.17}% 68 +\BOOKMARK [1][-]{section.17.5}{Eventual Consistency Handling}{chapter.17}% 69 +\BOOKMARK [1][-]{section.17.6}{Encryption}{chapter.17}% 70 diff --git a/doc/latex/manual.tex b/doc/latex/manual.tex index 7cd66e4..6310756 100644 --- a/doc/latex/manual.tex +++ b/doc/latex/manual.tex @@ -13,8 +13,8 @@ \title{S3QL Documentation} -\date{May 04, 2012} -\release{1.11.1} +\date{September 03, 2012} +\release{1.12} \author{Nikolaus Rath} \newcommand{\sphinxlogo}{} \renewcommand{\releasename}{Release} @@ -833,9 +833,9 @@ just print program version and exit \item [-L \textless{}name\textgreater{}] Filesystem label \item [-{-}max-obj-size \textless{}size\textgreater{}] -Maximum size of storage objects in KB. Files bigger +Maximum size of storage objects in KiB. Files bigger than this will be spread over multiple objects in the -storage backend. Default: 10240 KB. +storage backend. Default: 10240 KiB. \item [-{-}plain] Create unencrypted file system. \item [-{-}force] @@ -876,8 +876,8 @@ specified multiple times. be really quiet \item [-{-}log \textless{}target\textgreater{}] Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify \code{none} to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify \code{none} to disable logging. Default: \code{none} \item [-{-}authfile \textless{}path\textgreater{}] Read authentication credentials from this file (default: @@ -982,7 +982,7 @@ This command accepts the following options: \begin{optionlist}{3cm} \item [-{-}log \textless{}target\textgreater{}] Write logging info into this file. File will be -rotated when it reaches 1 MB, and at most 5 old log +rotated when it reaches 1 MiB, and at most 5 old log files will be kept. Specify \code{none} to disable logging. Default: \code{\textasciitilde{}/.s3ql/mount.log} \item [-{-}cachedir \textless{}path\textgreater{}] @@ -1005,8 +1005,8 @@ option is not set. \item [-{-}version] just print program version and exit \item [-{-}cachesize \textless{}size\textgreater{}] -Cache size in kb (default: 102400 (100 MB)). Should be -at least 10 times the maximum object size of the +Cache size in KiB (default: 102400 (100 MiB)). Should +be at least 10 times the maximum object size of the filesystem, otherwise an object may be retrieved and written several times during a single write() or read() operation. @@ -1017,11 +1017,6 @@ you increase this number you have to make sure that your process file descriptor limit (as set with \code{ulimit -n}) is high enough (at least the number of cache entries + 100). -\item [-{-}min-obj-size \textless{}size\textgreater{}] -Minimum size of storage objects in KB. Files smaller -than this may be combined into groups that are stored -as single objects in the storage backend. Default: 512 -KB. \item [-{-}allow-other] Normally, only the user who called \code{mount.s3ql} can access the mount point. This user then also has full @@ -1453,8 +1448,8 @@ This command accepts the following options: \begin{optionlist}{3cm} \item [-{-}log \textless{}target\textgreater{}] Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify \code{none} to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify \code{none} to disable logging. Default: \code{\textasciitilde{}/.s3ql/fsck.log} \item [-{-}cachedir \textless{}path\textgreater{}] Store cached data in this directory (default: \code{\textasciitilde{}/.s3ql)} @@ -1819,9 +1814,9 @@ details. \item {} S3QL is rather slow when an application tries to write data in -unreasonably small chunks. If a 1 MB file is copied in chunks of 1 +unreasonably small chunks. If a 1 MiB file is copied in chunks of 1 KB, this will take more than 10 times as long as when it's copied -with the (recommended) chunk size of 128 KB. +with the (recommended) chunk size of 128 KiB. This is a limitation of the FUSE library (which does not yet support write caching) which will hopefully be addressed in some future FUSE @@ -1943,9 +1938,9 @@ just print program version and exit \item [-L \textless{}name\textgreater{}] Filesystem label \item [-{-}max-obj-size \textless{}size\textgreater{}] -Maximum size of storage objects in KB. Files bigger +Maximum size of storage objects in KiB. Files bigger than this will be spread over multiple objects in the -storage backend. Default: 10240 KB. +storage backend. Default: 10240 KiB. \item [-{-}plain] Create unencrypted file system. \item [-{-}force] @@ -2005,8 +2000,8 @@ specified multiple times. be really quiet \item [-{-}log \textless{}target\textgreater{}] Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify \code{none} to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify \code{none} to disable logging. Default: \code{none} \item [-{-}authfile \textless{}path\textgreater{}] Read authentication credentials from this file (default: @@ -2086,7 +2081,7 @@ The \textbf{mount.s3ql} command accepts the following options. \begin{optionlist}{3cm} \item [-{-}log \textless{}target\textgreater{}] Write logging info into this file. File will be -rotated when it reaches 1 MB, and at most 5 old log +rotated when it reaches 1 MiB, and at most 5 old log files will be kept. Specify \code{none} to disable logging. Default: \code{\textasciitilde{}/.s3ql/mount.log} \item [-{-}cachedir \textless{}path\textgreater{}] @@ -2109,8 +2104,8 @@ option is not set. \item [-{-}version] just print program version and exit \item [-{-}cachesize \textless{}size\textgreater{}] -Cache size in kb (default: 102400 (100 MB)). Should be -at least 10 times the maximum object size of the +Cache size in KiB (default: 102400 (100 MiB)). Should +be at least 10 times the maximum object size of the filesystem, otherwise an object may be retrieved and written several times during a single write() or read() operation. @@ -2121,11 +2116,6 @@ you increase this number you have to make sure that your process file descriptor limit (as set with \code{ulimit -n}) is high enough (at least the number of cache entries + 100). -\item [-{-}min-obj-size \textless{}size\textgreater{}] -Minimum size of storage objects in KB. Files smaller -than this may be combined into groups that are stored -as single objects in the storage backend. Default: 512 -KB. \item [-{-}allow-other] Normally, only the user who called \code{mount.s3ql} can access the mount point. This user then also has full @@ -2266,7 +2256,7 @@ block while a snapshot of the metadata is prepared for upload. \item[{cachesize}] \leavevmode Changes the cache size of the file system. This action requires an -additional argument that specifies the new cache size in kB, so the +additional argument that specifies the new cache size in KiB, so the complete command line is: \begin{Verbatim}[commandchars=\\\{\}] @@ -2657,8 +2647,8 @@ The \textbf{mkfs.s3ql} command accepts the following options. \begin{optionlist}{3cm} \item [-{-}log \textless{}target\textgreater{}] Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify \code{none} to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify \code{none} to disable logging. Default: \code{\textasciitilde{}/.s3ql/fsck.log} \item [-{-}cachedir \textless{}path\textgreater{}] Store cached data in this directory (default: \code{\textasciitilde{}/.s3ql)} diff --git a/doc/latex/manual.toc b/doc/latex/manual.toc index 59e664c..9b700a7 100644 --- a/doc/latex/manual.toc +++ b/doc/latex/manual.toc @@ -70,7 +70,7 @@ \contentsline {subsection}{\numberline {15.3.1}Synopsis}{41}{subsection.15.3.1} \contentsline {subsection}{\numberline {15.3.2}Description}{41}{subsection.15.3.2} \contentsline {subsection}{\numberline {15.3.3}Options}{41}{subsection.15.3.3} -\contentsline {subsection}{\numberline {15.3.4}Exit Status}{43}{subsection.15.3.4} +\contentsline {subsection}{\numberline {15.3.4}Exit Status}{42}{subsection.15.3.4} \contentsline {subsection}{\numberline {15.3.5}See Also}{43}{subsection.15.3.5} \contentsline {section}{\numberline {15.4}The \textbf {s3qlstat} command}{43}{section.15.4} \contentsline {subsection}{\numberline {15.4.1}Synopsis}{43}{subsection.15.4.1} @@ -78,17 +78,17 @@ \contentsline {subsection}{\numberline {15.4.3}Options}{43}{subsection.15.4.3} \contentsline {subsection}{\numberline {15.4.4}Exit Status}{43}{subsection.15.4.4} \contentsline {subsection}{\numberline {15.4.5}See Also}{43}{subsection.15.4.5} -\contentsline {section}{\numberline {15.5}The \textbf {s3qlctrl} command}{44}{section.15.5} -\contentsline {subsection}{\numberline {15.5.1}Synopsis}{44}{subsection.15.5.1} +\contentsline {section}{\numberline {15.5}The \textbf {s3qlctrl} command}{43}{section.15.5} +\contentsline {subsection}{\numberline {15.5.1}Synopsis}{43}{subsection.15.5.1} \contentsline {subsection}{\numberline {15.5.2}Description}{44}{subsection.15.5.2} \contentsline {subsection}{\numberline {15.5.3}Options}{44}{subsection.15.5.3} \contentsline {subsection}{\numberline {15.5.4}Exit Status}{44}{subsection.15.5.4} -\contentsline {subsection}{\numberline {15.5.5}See Also}{45}{subsection.15.5.5} +\contentsline {subsection}{\numberline {15.5.5}See Also}{44}{subsection.15.5.5} \contentsline {section}{\numberline {15.6}The \textbf {s3qlcp} command}{45}{section.15.6} \contentsline {subsection}{\numberline {15.6.1}Synopsis}{45}{subsection.15.6.1} \contentsline {subsection}{\numberline {15.6.2}Description}{45}{subsection.15.6.2} \contentsline {subsubsection}{Snapshotting vs Hardlinking}{45}{subsubsection*.3} -\contentsline {subsection}{\numberline {15.6.3}Options}{46}{subsection.15.6.3} +\contentsline {subsection}{\numberline {15.6.3}Options}{45}{subsection.15.6.3} \contentsline {subsection}{\numberline {15.6.4}Exit Status}{46}{subsection.15.6.4} \contentsline {subsection}{\numberline {15.6.5}See Also}{46}{subsection.15.6.5} \contentsline {section}{\numberline {15.7}The \textbf {s3qlrm} command}{46}{section.15.7} @@ -96,36 +96,36 @@ \contentsline {subsection}{\numberline {15.7.2}Description}{46}{subsection.15.7.2} \contentsline {subsection}{\numberline {15.7.3}Options}{46}{subsection.15.7.3} \contentsline {subsection}{\numberline {15.7.4}Exit Status}{46}{subsection.15.7.4} -\contentsline {subsection}{\numberline {15.7.5}See Also}{47}{subsection.15.7.5} +\contentsline {subsection}{\numberline {15.7.5}See Also}{46}{subsection.15.7.5} \contentsline {section}{\numberline {15.8}The \textbf {s3qllock} command}{47}{section.15.8} \contentsline {subsection}{\numberline {15.8.1}Synopsis}{47}{subsection.15.8.1} \contentsline {subsection}{\numberline {15.8.2}Description}{47}{subsection.15.8.2} \contentsline {subsection}{\numberline {15.8.3}Rationale}{47}{subsection.15.8.3} \contentsline {subsection}{\numberline {15.8.4}Options}{47}{subsection.15.8.4} -\contentsline {subsection}{\numberline {15.8.5}Exit Status}{48}{subsection.15.8.5} +\contentsline {subsection}{\numberline {15.8.5}Exit Status}{47}{subsection.15.8.5} \contentsline {subsection}{\numberline {15.8.6}See Also}{48}{subsection.15.8.6} \contentsline {section}{\numberline {15.9}The \textbf {umount.s3ql} command}{48}{section.15.9} \contentsline {subsection}{\numberline {15.9.1}Synopsis}{48}{subsection.15.9.1} \contentsline {subsection}{\numberline {15.9.2}Description}{48}{subsection.15.9.2} \contentsline {subsection}{\numberline {15.9.3}Options}{48}{subsection.15.9.3} \contentsline {subsection}{\numberline {15.9.4}Exit Status}{48}{subsection.15.9.4} -\contentsline {subsection}{\numberline {15.9.5}See Also}{49}{subsection.15.9.5} +\contentsline {subsection}{\numberline {15.9.5}See Also}{48}{subsection.15.9.5} \contentsline {section}{\numberline {15.10}The \textbf {fsck.s3ql} command}{49}{section.15.10} \contentsline {subsection}{\numberline {15.10.1}Synopsis}{49}{subsection.15.10.1} \contentsline {subsection}{\numberline {15.10.2}Description}{49}{subsection.15.10.2} \contentsline {subsection}{\numberline {15.10.3}Options}{49}{subsection.15.10.3} \contentsline {subsection}{\numberline {15.10.4}Exit Status}{49}{subsection.15.10.4} -\contentsline {subsection}{\numberline {15.10.5}See Also}{50}{subsection.15.10.5} +\contentsline {subsection}{\numberline {15.10.5}See Also}{49}{subsection.15.10.5} \contentsline {section}{\numberline {15.11}The \textbf {pcp} command}{50}{section.15.11} \contentsline {subsection}{\numberline {15.11.1}Synopsis}{50}{subsection.15.11.1} \contentsline {subsection}{\numberline {15.11.2}Description}{50}{subsection.15.11.2} \contentsline {subsection}{\numberline {15.11.3}Options}{50}{subsection.15.11.3} \contentsline {subsection}{\numberline {15.11.4}Exit Status}{50}{subsection.15.11.4} \contentsline {subsection}{\numberline {15.11.5}See Also}{50}{subsection.15.11.5} -\contentsline {section}{\numberline {15.12}The \textbf {expire\_backups} command}{51}{section.15.12} -\contentsline {subsection}{\numberline {15.12.1}Synopsis}{51}{subsection.15.12.1} -\contentsline {subsection}{\numberline {15.12.2}Description}{51}{subsection.15.12.2} -\contentsline {subsection}{\numberline {15.12.3}Options}{52}{subsection.15.12.3} +\contentsline {section}{\numberline {15.12}The \textbf {expire\_backups} command}{50}{section.15.12} +\contentsline {subsection}{\numberline {15.12.1}Synopsis}{50}{subsection.15.12.1} +\contentsline {subsection}{\numberline {15.12.2}Description}{50}{subsection.15.12.2} +\contentsline {subsection}{\numberline {15.12.3}Options}{51}{subsection.15.12.3} \contentsline {subsection}{\numberline {15.12.4}Exit Status}{52}{subsection.15.12.4} \contentsline {subsection}{\numberline {15.12.5}See Also}{52}{subsection.15.12.5} \contentsline {chapter}{\numberline {16}Further Resources / Getting Help}{53}{chapter.16} diff --git a/doc/man/fsck.s3ql.1 b/doc/man/fsck.s3ql.1 index 9442872..b3f2578 100644 --- a/doc/man/fsck.s3ql.1 +++ b/doc/man/fsck.s3ql.1 @@ -1,4 +1,4 @@ -.TH "FSCK.S3QL" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "FSCK.S3QL" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME fsck.s3ql \- Check an S3QL file system for errors . @@ -57,8 +57,8 @@ The \fBmkfs.s3ql\fP command accepts the following options. .TP .BI \-\-log \ <target> Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify \fBnone\fP to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify \fBnone\fP to disable logging. Default: \fB~/.s3ql/fsck.log\fP .TP .BI \-\-cachedir \ <path> diff --git a/doc/man/mkfs.s3ql.1 b/doc/man/mkfs.s3ql.1 index aa94166..2ebec69 100644 --- a/doc/man/mkfs.s3ql.1 +++ b/doc/man/mkfs.s3ql.1 @@ -1,4 +1,4 @@ -.TH "MKFS.S3QL" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "MKFS.S3QL" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME mkfs.s3ql \- Create an S3QL file system . @@ -88,9 +88,9 @@ just print program version and exit Filesystem label .TP .BI \-\-max\-obj\-size \ <size> -Maximum size of storage objects in KB. Files bigger +Maximum size of storage objects in KiB. Files bigger than this will be spread over multiple objects in the -storage backend. Default: 10240 KB. +storage backend. Default: 10240 KiB. .TP .B \-\-plain Create unencrypted file system. diff --git a/doc/man/mount.s3ql.1 b/doc/man/mount.s3ql.1 index a1152bd..4d40e0f 100644 --- a/doc/man/mount.s3ql.1 +++ b/doc/man/mount.s3ql.1 @@ -1,4 +1,4 @@ -.TH "MOUNT.S3QL" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "MOUNT.S3QL" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME mount.s3ql \- Mount an S3QL file system . @@ -56,7 +56,7 @@ The \fBmount.s3ql\fP command accepts the following options. .TP .BI \-\-log \ <target> Write logging info into this file. File will be -rotated when it reaches 1 MB, and at most 5 old log +rotated when it reaches 1 MiB, and at most 5 old log files will be kept. Specify \fBnone\fP to disable logging. Default: \fB~/.s3ql/mount.log\fP .TP @@ -86,8 +86,8 @@ option is not set. just print program version and exit .TP .BI \-\-cachesize \ <size> -Cache size in kb (default: 102400 (100 MB)). Should be -at least 10 times the maximum object size of the +Cache size in KiB (default: 102400 (100 MiB)). Should +be at least 10 times the maximum object size of the filesystem, otherwise an object may be retrieved and written several times during a single write() or read() operation. @@ -100,12 +100,6 @@ your process file descriptor limit (as set with \fBulimit \-n\fP) is high enough (at least the number of cache entries + 100). .TP -.BI \-\-min\-obj\-size \ <size> -Minimum size of storage objects in KB. Files smaller -than this may be combined into groups that are stored -as single objects in the storage backend. Default: 512 -KB. -.TP .B \-\-allow\-other Normally, only the user who called \fBmount.s3ql\fP can access the mount point. This user then also has full diff --git a/doc/man/s3qladm.1 b/doc/man/s3qladm.1 index 59d828a..f4583a7 100644 --- a/doc/man/s3qladm.1 +++ b/doc/man/s3qladm.1 @@ -1,4 +1,4 @@ -.TH "S3QLADM" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "S3QLADM" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME s3qladm \- Manage S3QL file systems . @@ -69,8 +69,8 @@ be really quiet .TP .BI \-\-log \ <target> Write logging info into this file. File will be rotated -when it reaches 1 MB, and at most 5 old log files will be -kept. Specify \fBnone\fP to disable logging. Default: +when it reaches 1 MiB, and at most 5 old log files will +be kept. Specify \fBnone\fP to disable logging. Default: \fBnone\fP .TP .BI \-\-authfile \ <path> diff --git a/doc/man/s3qlcp.1 b/doc/man/s3qlcp.1 index cd308bd..0875b48 100644 --- a/doc/man/s3qlcp.1 +++ b/doc/man/s3qlcp.1 @@ -1,4 +1,4 @@ -.TH "S3QLCP" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "S3QLCP" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME s3qlcp \- Copy-on-write replication on S3QL file systems . diff --git a/doc/man/s3qlctrl.1 b/doc/man/s3qlctrl.1 index 7568a01..ab2686f 100644 --- a/doc/man/s3qlctrl.1 +++ b/doc/man/s3qlctrl.1 @@ -1,4 +1,4 @@ -.TH "S3QLCTRL" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "S3QLCTRL" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME s3qlctrl \- Control a mounted S3QL file system . @@ -67,7 +67,7 @@ block while a snapshot of the metadata is prepared for upload. .TP .B cachesize Changes the cache size of the file system. This action requires an -additional argument that specifies the new cache size in kB, so the +additional argument that specifies the new cache size in KiB, so the complete command line is: .sp .nf diff --git a/doc/man/s3qllock.1 b/doc/man/s3qllock.1 index 1ef560e..9aa0773 100644 --- a/doc/man/s3qllock.1 +++ b/doc/man/s3qllock.1 @@ -1,4 +1,4 @@ -.TH "S3QLLOCK" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "S3QLLOCK" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME s3qllock \- Make trees on an S3QL file system immutable . diff --git a/doc/man/s3qlrm.1 b/doc/man/s3qlrm.1 index 32cb077..0e91684 100644 --- a/doc/man/s3qlrm.1 +++ b/doc/man/s3qlrm.1 @@ -1,4 +1,4 @@ -.TH "S3QLRM" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "S3QLRM" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME s3qlrm \- Fast tree removal on S3QL file systems . diff --git a/doc/man/s3qlstat.1 b/doc/man/s3qlstat.1 index c0f7e0d..2b93fd6 100644 --- a/doc/man/s3qlstat.1 +++ b/doc/man/s3qlstat.1 @@ -1,4 +1,4 @@ -.TH "S3QLSTAT" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "S3QLSTAT" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME s3qlstat \- Gather S3QL file system statistics . diff --git a/doc/man/umount.s3ql.1 b/doc/man/umount.s3ql.1 index 221b0ae..0825165 100644 --- a/doc/man/umount.s3ql.1 +++ b/doc/man/umount.s3ql.1 @@ -1,4 +1,4 @@ -.TH "UMOUNT.S3QL" "1" "May 04, 2012" "1.11.1" "S3QL" +.TH "UMOUNT.S3QL" "1" "September 03, 2012" "1.12" "S3QL" .SH NAME umount.s3ql \- Unmount an S3QL file system . diff --git a/doc/manual.pdf b/doc/manual.pdf Binary files differindex c777f62..b66dacf 100644 --- a/doc/manual.pdf +++ b/doc/manual.pdf diff --git a/rst/issues.rst b/rst/issues.rst index 9e9db5d..b5d8735 100644 --- a/rst/issues.rst +++ b/rst/issues.rst @@ -10,9 +10,9 @@ Known Issues details. * S3QL is rather slow when an application tries to write data in - unreasonably small chunks. If a 1 MB file is copied in chunks of 1 + unreasonably small chunks. If a 1 MiB file is copied in chunks of 1 KB, this will take more than 10 times as long as when it's copied - with the (recommended) chunk size of 128 KB. + with the (recommended) chunk size of 128 KiB. This is a limitation of the FUSE library (which does not yet support write caching) which will hopefully be addressed in some future FUSE diff --git a/rst/man/ctrl.rst b/rst/man/ctrl.rst index 8173162..0acc8f0 100644 --- a/rst/man/ctrl.rst +++ b/rst/man/ctrl.rst @@ -41,7 +41,7 @@ upload-meta cachesize Changes the cache size of the file system. This action requires an - additional argument that specifies the new cache size in kB, so the + additional argument that specifies the new cache size in KiB, so the complete command line is:: s3qlctrl [options] cachesize <mountpoint> <new-cache-size> diff --git a/src/s3ql.egg-info/PKG-INFO b/src/s3ql.egg-info/PKG-INFO index 4b0c152..fb8afae 100644 --- a/src/s3ql.egg-info/PKG-INFO +++ b/src/s3ql.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: s3ql -Version: 1.11.1 +Version: 1.12 Summary: a full-featured file system for online data storage Home-page: http://code.google.com/p/s3ql/ Author: Nikolaus Rath diff --git a/src/s3ql/__init__.py b/src/s3ql/__init__.py index 5775d26..10d2694 100644 --- a/src/s3ql/__init__.py +++ b/src/s3ql/__init__.py @@ -14,7 +14,7 @@ __all__ = [ 'adm', 'backends', 'block_cache', 'cleanup_manager', 'common', 'parse_args', 'remove', 'statfs', 'umount', 'VERSION', 'CURRENT_FS_REV', 'REV_VER_MAP' ] -VERSION = '1.11.1' +VERSION = '1.12' CURRENT_FS_REV = 16 # Maps file system revisions to the last S3QL version that diff --git a/src/s3ql/_deltadump.c b/src/s3ql/_deltadump.c index 91379b9..2dc4d46 100644 --- a/src/s3ql/_deltadump.c +++ b/src/s3ql/_deltadump.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Sat Jan 21 13:29:51 2012 */ +/* Generated by Cython 0.15.1 on Mon Sep 3 21:02:10 2012 */ #define PY_SSIZE_T_CLEAN #include "Python.h" diff --git a/src/s3ql/adm.py b/src/s3ql/adm.py index fc7a06c..a848f54 100644 --- a/src/s3ql/adm.py +++ b/src/s3ql/adm.py @@ -119,7 +119,12 @@ def download_metadata(backend, storage_url): log.info('The following backups are available:') log.info('%3s %-23s %-15s', 'No', 'Name', 'Date') for (i, name) in enumerate(backups): - params = backend.lookup(name) + try: + params = backend.lookup(name) + except: + log.error('Error retrieving information about %s, skipping', name) + continue + if 'last-modified' in params: date = Datetime.fromtimestamp(params['last-modified']).strftime('%Y-%m-%d %H:%M:%S') else: @@ -249,6 +254,10 @@ def upgrade(backend, cachepath): if param['seq_no'] < seq_no: log.info('Ignoring locally cached metadata (outdated).') param = backend.lookup('s3ql_metadata') + elif param['seq_no'] > seq_no: + print('File system not unmounted cleanly, need to run fsck before upgrade.') + print(get_old_rev_msg(param['revision'], 'fsck.s3ql')) + raise QuietError() else: log.info('Using cached metadata.') db = Connection(cachepath + '.db') @@ -270,7 +279,9 @@ def upgrade(backend, cachepath): # Check that the fs itself is clean if param['needs_fsck']: - raise QuietError("File system damaged, run fsck first!") + print('File system is damaged, need to run fsck before upgrade.') + print(get_old_rev_msg(param['revision'], 'fsck.s3ql')) + raise QuietError() # Check revision if param['revision'] < CURRENT_FS_REV - 1: @@ -344,7 +355,7 @@ def upgrade(backend, cachepath): backend.store('s3ql_seq_no_%d' % param['seq_no'], 'Empty') obj_fh = backend.perform_write(do_write, "s3ql_metadata", metadata=param, is_compressed=True) - log.info('Wrote %.2f MB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) + log.info('Wrote %.2f MiB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) pickle.dump(param, open(cachepath + '.params', 'wb'), 2) db.execute('ANALYZE') diff --git a/src/s3ql/backends/s3c.py b/src/s3ql/backends/s3c.py index c5b84d7..5fba441 100644 --- a/src/s3ql/backends/s3c.py +++ b/src/s3ql/backends/s3c.py @@ -530,10 +530,29 @@ class ObjectR(object): if not buf and not self.md5_checked: etag = self.resp.getheader('ETag').strip('"') self.md5_checked = True + + # Apparently sometimes the response is not closed even when all data has been read. In + # that case, the next request can still be send, but an attempt to retrieve the next + # response will result in an ResponseNotReady() exception: + # http://code.google.com/p/s3ql/issues/detail?id=358 + # This code attempts to produce additional debug information when that happens, + # so that we can figure out what exactly is going wrong. + if not self.resp.isclosed(): + log.error('ObjectR.read(): response not closed after end of data, ' + 'please report on http://code.google.com/p/s3ql/issues/') + log.error('Method: %s, chunked: %s, read length: %s ' + 'response length: %s, chunk_left: %s, status: %d ' + 'reason "%s", version: %s, will_close: %s', + self.resp._method, self.resp.chunked, size, self.resp.length, + self.resp.chunk_left, self.resp.status, self.resp.reason, + self.resp.version, self.resp.will_close) + self.resp.close() + if etag != self.md5.hexdigest(): log.warn('ObjectR(%s).close(): MD5 mismatch: %s vs %s', self.key, etag, self.md5.hexdigest()) raise BadDigest('BadDigest', 'ETag header does not agree with calculated MD5') + return buf self.md5.update(buf) diff --git a/src/s3ql/backends/swift.py b/src/s3ql/backends/swift.py index ae4b9ab..f2fe4b7 100644 --- a/src/s3ql/backends/swift.py +++ b/src/s3ql/backends/swift.py @@ -172,7 +172,7 @@ class Backend(AbstractBackend): headers['content-length'] = '0' if self.conn is None: - log.info('_do_request(): no active connection, calling _get_conn()') + log.debug('_do_request(): no active connection, calling _get_conn()') self.conn = self._get_conn() # Construct full path @@ -541,6 +541,24 @@ class ObjectR(object): if not buf and not self.md5_checked: etag = self.resp.getheader('ETag').strip('"') self.md5_checked = True + + # Apparently sometimes the response is not closed even when all data has been read. In + # that case, the next request can still be send, but an attempt to retrieve the next + # response will result in an ResponseNotReady() exception: + # http://code.google.com/p/s3ql/issues/detail?id=358 + # This code attempts to produce additional debug information when that happens, + # so that we can figure out what exactly is going wrong. + if not self.resp.isclosed(): + log.error('ObjectR.read(): response not closed after end of data, ' + 'please report on http://code.google.com/p/s3ql/issues/') + log.error('Method: %s, chunked: %s, read length: %s ' + 'response length: %s, chunk_left: %s, status: %d ' + 'reason "%s", version: %s, will_close: %s', + self.resp._method, self.resp.chunked, size, self.resp.length, + self.resp.chunk_left, self.resp.status, self.resp.reason, + self.resp.version, self.resp.will_close) + self.resp.close() + if etag != self.md5.hexdigest(): log.warn('ObjectR(%s).close(): MD5 mismatch: %s vs %s', self.key, etag, self.md5.hexdigest()) diff --git a/src/s3ql/block_cache.py b/src/s3ql/block_cache.py index 2e775de..faf5a85 100644 --- a/src/s3ql/block_cache.py +++ b/src/s3ql/block_cache.py @@ -307,7 +307,7 @@ class BlockCache(object): if log.isEnabledFor(logging.DEBUG): time_ = time.time() - time_ rate = el.size / (1024 ** 2 * time_) if time_ != 0 else 0 - log.debug('_do_upload(%s): uploaded %d bytes in %.3f seconds, %.2f MB/s', + log.debug('_do_upload(%s): uploaded %d bytes in %.3f seconds, %.2f MiB/s', obj_id, el.size, time_, rate) with lock: diff --git a/src/s3ql/common.py b/src/s3ql/common.py index b1e734c..6a1d2f9 100644 --- a/src/s3ql/common.py +++ b/src/s3ql/common.py @@ -271,14 +271,19 @@ def setup_excepthook(): if isinstance(val, QuietError): root_logger.error(val.msg) else: - try: - msg = format_tb((type_, val, tb)) - except: - root_logger.error('Uncaught top-level exception -- and tb handler failed!', - exc_info=(type_, val, tb)) - else: - root_logger.error('Uncaught top-level exception. %s', msg) - + # Customized exception handler has shown to just blow up the size + # of error messages and potentially include confidential data + # without providing any significant benefits +# try: +# msg = format_tb((type_, val, tb)) +# except: +# root_logger.error('Uncaught top-level exception -- and tb handler failed!', +# exc_info=(type_, val, tb)) +# else: +# root_logger.error('Uncaught top-level exception. %s', msg) + root_logger.error('Uncaught top-level exception:', + exc_info=(type_, val, tb)) + sys.excepthook = excepthook def inode_for_path(path, conn): diff --git a/src/s3ql/ctrl.py b/src/s3ql/ctrl.py index 1db566a..9756ceb 100644 --- a/src/s3ql/ctrl.py +++ b/src/s3ql/ctrl.py @@ -48,7 +48,7 @@ def parse_args(args): sparser = subparsers.add_parser('cachesize', help='Change cache size', parents=[pparser]) sparser.add_argument('cachesize', metavar='<size>', type=int, - help='New cache size in KB') + help='New cache size in KiB') sparser = subparsers.add_parser('log', help='Change log level', parents=[pparser]) diff --git a/src/s3ql/fs.py b/src/s3ql/fs.py index 82037c7..ae2646d 100644 --- a/src/s3ql/fs.py +++ b/src/s3ql/fs.py @@ -816,26 +816,25 @@ class Operations(llfuse.Operations): if size is None: size = 0 - # file system block size + # file system block size, i.e. the minimum amount of space that can + # be allocated. This doesn't make much sense for S3QL, so we just + # return the average size of stored blocks. + stat_.f_frsize = size // blocks if blocks != 0 else 4096 - # It would be nice if we could use different values for f_bsize and - # f_frsize here to also export the maximum block size. However, `df` - # incorrectly interprets f_blocks, f_bfree and f_bavail in terms of - # f_bsize rather than f_frsize as it should (according to statvfs(3)), - # so the only way to return correct values *and* have df print something - # sensible is to set f_bsize and f_frsize to the same value. - # (cf. http://bugs.debian.org/671490) - stat_.f_bsize = size // blocks if blocks != 0 else self.max_obj_size - stat_.f_frsize = stat_.f_bsize - - # size of fs in f_frsize units - # (since backend is supposed to be unlimited, always return a half-full filesystem, - # but at least 1 TB) - total_blocks = max(2 * blocks, 1024 ** 4 // stat_.f_frsize) - - stat_.f_blocks = total_blocks - stat_.f_bfree = total_blocks - blocks - stat_.f_bavail = total_blocks - blocks # free for non-root + # This should actually be the "preferred block size for doing IO. However, `df` incorrectly + # interprets f_blocks, f_bfree and f_bavail in terms of f_bsize rather than f_frsize as it + # should (according to statvfs(3)), so the only way to return correct values *and* have df + # print something sensible is to set f_bsize and f_frsize to the same value. (cf. + # http://bugs.debian.org/671490) + stat_.f_bsize = stat_.f_frsize + + # size of fs in f_frsize units. Since backend is supposed to be unlimited, + # always return a half-full filesystem, but at least 1 TB) + fs_size = max(2 * size, 1024 ** 4) + + stat_.f_blocks = fs_size // stat_.f_frsize + stat_.f_bfree = (fs_size - size) // stat_.f_frsize + stat_.f_bavail = stat_.f_bfree # free for non-root total_inodes = max(2 * inodes, 1000000) stat_.f_files = total_inodes diff --git a/src/s3ql/fsck.py b/src/s3ql/fsck.py index b5ba9fe..19cdd48 100644 --- a/src/s3ql/fsck.py +++ b/src/s3ql/fsck.py @@ -692,6 +692,7 @@ class Fsck(object): - Only devices should have a device number - symlink size is length of target - names are not longer than 255 bytes + - All directory entries have a valid mode Note that none of this is enforced by S3QL. However, as long as S3QL only communicates with the UNIX FUSE module, none of the above should @@ -705,6 +706,22 @@ class Fsck(object): in self.conn.query("SELECT id, mode, size, target, rdev " "FROM inodes LEFT JOIN symlink_targets ON id = inode"): + has_children = self.conn.has_val('SELECT 1 FROM contents WHERE parent_inode=? LIMIT 1', + (inode,)) + + if stat.S_IFMT(mode) == 0: + if has_children: + mode = mode | stat.S_IFDIR + made_to = 'directory' + else: + mode = mode | stat.S_IFREG + made_to = 'regular file' + + self.found_errors = True + self.log_error('Inode %d (%s): directory entry has no type, changed ' + 'to %s.', inode, get_path(inode, self.conn), made_to) + self.conn.execute('UPDATE inodes SET mode=? WHERE id=?', (mode, inode)) + if stat.S_ISLNK(mode) and target is None: self.found_errors = True self.log_error('Inode %d (%s): symlink does not have target. ' @@ -737,8 +754,7 @@ class Fsck(object): 'This is probably going to confuse your system!', inode, get_path(inode, self.conn)) - has_children = self.conn.has_val('SELECT 1 FROM contents WHERE parent_inode=? LIMIT 1', - (inode,)) + if has_children and not stat.S_ISDIR(mode): self.found_errors = True self.log_error('Inode %d (%s) is not a directory but has child entries. ' @@ -751,6 +767,10 @@ class Fsck(object): self.log_error('Inode %d (%s) is not a regular file but has data blocks. ' 'This is probably going to confuse your system!', inode, get_path(inode, self.conn)) + + + + for (name, id_p) in self.conn.query('SELECT name, parent_inode FROM contents_v ' 'WHERE LENGTH(name) > 255'): @@ -1065,7 +1085,6 @@ def main(args=None): cachepath = get_backend_cachedir(options.storage_url, options.cachedir) seq_no = get_seq_no(backend) - param_remote = backend.lookup('s3ql_metadata') db = None if os.path.exists(cachepath + '.params'): @@ -1079,12 +1098,16 @@ def main(args=None): db = Connection(cachepath + '.db') assert not os.path.exists(cachepath + '-cache') or param['needs_fsck'] - if param_remote['seq_no'] != param['seq_no']: + if param['seq_no'] > seq_no: + log.warn('File system has not been unmounted cleanly.') + param['needs_fsck'] = True + + elif backend.lookup('s3ql_metadata')['seq_no'] != param['seq_no']: log.warn('Remote metadata is outdated.') param['needs_fsck'] = True else: - param = param_remote + param = backend.lookup('s3ql_metadata') assert not os.path.exists(cachepath + '-cache') # .db might exist if mount.s3ql is killed at exactly the right instant # and should just be ignored. @@ -1197,7 +1220,7 @@ def main(args=None): log.info("Compressing and uploading metadata...") obj_fh = backend.perform_write(do_write, "s3ql_metadata", metadata=param, is_compressed=True) - log.info('Wrote %.2f MB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) + log.info('Wrote %.2f MiB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) pickle.dump(param, open(cachepath + '.params', 'wb'), 2) db.execute('ANALYZE') diff --git a/src/s3ql/mkfs.py b/src/s3ql/mkfs.py index 9f03619..2bc67a3 100644 --- a/src/s3ql/mkfs.py +++ b/src/s3ql/mkfs.py @@ -42,9 +42,9 @@ def parse_args(args): parser.add_argument("-L", default='', help="Filesystem label", dest="label", metavar='<name>',) parser.add_argument("--max-obj-size", type=int, default=10240, metavar='<size>', - help="Maximum size of storage objects in KB. Files bigger than this " + help="Maximum size of storage objects in KiB. Files bigger than this " "will be spread over multiple objects in the storage backend. " - "Default: %(default)d KB.") + "Default: %(default)d KiB.") parser.add_argument("--plain", action="store_true", default=False, help="Create unencrypted file system.") parser.add_argument("--force", action="store_true", default=False, @@ -88,7 +88,7 @@ def main(args=None): setup_logging(options) if options.max_obj_size < 1024: - log.warn('Warning: maximum object sizes less than 1 MB will seriously degrade ' + log.warn('Warning: maximum object sizes less than 1 MiB will seriously degrade ' 'performance.') try: @@ -171,7 +171,7 @@ def main(args=None): backend.store('s3ql_seq_no_%d' % param['seq_no'], 'Empty') obj_fh = backend.perform_write(do_write, "s3ql_metadata", metadata=param, is_compressed=True) - log.info('Wrote %.2f MB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) + log.info('Wrote %.2f MiB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) pickle.dump(param, open(cachepath + '.params', 'wb'), 2) diff --git a/src/s3ql/mount.py b/src/s3ql/mount.py index a6fdcaa..0e20aaa 100644 --- a/src/s3ql/mount.py +++ b/src/s3ql/mount.py @@ -18,6 +18,7 @@ from .inode_cache import InodeCache from .metadata import cycle_metadata, dump_metadata, restore_metadata from .parse_args import ArgumentParser from threading import Thread +import argparse import cPickle as pickle import llfuse import logging @@ -227,7 +228,7 @@ def main(args=None): log.info("Compressing and uploading metadata...") obj_fh = backend.perform_write(do_write, "s3ql_metadata", metadata=param, is_compressed=True) - log.info('Wrote %.2f MB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) + log.info('Wrote %.2f MiB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) pickle.dump(param, open(cachepath + '.params', 'wb'), 2) else: log.error('Remote metadata is newer than local (%d vs %d), ' @@ -279,7 +280,7 @@ def determine_threads(options): if threads > 0: log.info('Using %d upload threads (memory limited).', threads) else: - log.warn('Warning: compression will require %d MB memory ' + log.warn('Warning: compression will require %d MiB memory ' '(%d%% of total system memory', mem_per_thread / 1024 ** 2, mem_per_thread * 100 / memory) threads = 1 @@ -301,6 +302,8 @@ def get_metadata(backend, cachepath): if param['seq_no'] < seq_no: log.info('Ignoring locally cached metadata (outdated).') param = backend.lookup('s3ql_metadata') + elif param['seq_no'] > seq_no: + raise QuietError("File system not unmounted cleanly, run fsck!") else: log.info('Using cached metadata.') db = Connection(cachepath + '.db') @@ -416,7 +419,7 @@ def parse_args(args): parser.add_argument("mountpoint", metavar='<mountpoint>', type=os.path.abspath, help='Where to mount the file system') parser.add_argument("--cachesize", type=int, default=102400, metavar='<size>', - help="Cache size in kb (default: 102400 (100 MB)). Should be at least 10 times " + help="Cache size in KiB (default: 102400 (100 MiB)). Should be at least 10 times " "the maximum object size of the filesystem, otherwise an object may be retrieved " "and written several times during a single write() or read() operation.") parser.add_argument("--max-cache-entries", type=int, default=768, metavar='<num>', @@ -426,9 +429,10 @@ def parse_args(args): 'limit (as set with `ulimit -n`) is high enough (at least the number ' 'of cache entries + 100).') parser.add_argument("--min-obj-size", type=int, default=512, metavar='<size>', - help="Minimum size of storage objects in KB. Files smaller than this " - "may be combined into groups that are stored as single objects " - "in the storage backend. Default: %(default)d KB.") + help=argparse.SUPPRESS) +# help="Minimum size of storage objects in KiB. Files smaller than this " +# "may be combined into groups that are stored as single objects " +# "in the storage backend. Default: %(default)d KB.") parser.add_argument("--allow-other", action="store_true", default=False, help= 'Normally, only the user who called `mount.s3ql` can access the mount ' 'point. This user then also has full access to it, independent of ' @@ -552,7 +556,7 @@ class MetadataUploadThread(Thread): log.info("Compressing and uploading metadata...") obj_fh = backend.perform_write(do_write, "s3ql_metadata", metadata=self.param, is_compressed=True) - log.info('Wrote %.2f MB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) + log.info('Wrote %.2f MiB of compressed metadata.', obj_fh.get_obj_size() / 1024 ** 2) self.param['seq_no'] += 1 fh.close() diff --git a/src/s3ql/parse_args.py b/src/s3ql/parse_args.py index bc108dc..6fab2f9 100644 --- a/src/s3ql/parse_args.py +++ b/src/s3ql/parse_args.py @@ -192,7 +192,7 @@ class ArgumentParser(argparse.ArgumentParser): self.add_argument("--log", type=log_handler, metavar='<target>', default=default, help='Write logging info into this file. File will be rotated when ' - 'it reaches 1 MB, and at most 5 old log files will be kept. ' + 'it reaches 1 MiB, and at most 5 old log files will be kept. ' 'Specify ``none`` to disable logging. Default: ``%(default)s``') def add_storage_url(self): diff --git a/src/s3ql/statfs.py b/src/s3ql/statfs.py index 0375bdc..5b6f0ce 100644 --- a/src/s3ql/statfs.py +++ b/src/s3ql/statfs.py @@ -71,12 +71,12 @@ def main(args=None): print ('Directory entries: %d' % entries, 'Inodes: %d' % inodes, 'Data blocks: %d' % blocks, - 'Total data size: %.2f MB' % (fs_size / mb), - 'After de-duplication: %.2f MB (%.2f%% of total)' + 'Total data size: %.2f MiB' % (fs_size / mb), + 'After de-duplication: %.2f MiB (%.2f%% of total)' % (dedup_size / mb, p_dedup), - 'After compression: %.2f MB (%.2f%% of total, %.2f%% of de-duplicated)' + 'After compression: %.2f MiB (%.2f%% of total, %.2f%% of de-duplicated)' % (compr_size / mb, p_compr_1, p_compr_2), - 'Database size: %.2f MB (uncompressed)' % (db_size / mb), + 'Database size: %.2f MiB (uncompressed)' % (db_size / mb), '(some values do not take into account not-yet-uploaded dirty blocks in cache)', sep='\n') diff --git a/src/s3ql/umount.py b/src/s3ql/umount.py index b2fdab8..fa21680 100644 --- a/src/s3ql/umount.py +++ b/src/s3ql/umount.py @@ -15,6 +15,7 @@ import os import posixpath import subprocess import sys +import errno import textwrap import time @@ -46,44 +47,51 @@ def parse_args(args): return parser.parse_args(args) -class MountError(Exception): +class UmountError(Exception): """ - Base class for mountpoint errors. + Base class for unmount errors. """ - message = '' + message = 'internal error' + exitcode = 3 def __init__(self, mountpoint): - super(MountError, self).__init__() + super(UmountError, self).__init__() self.mountpoint = mountpoint - + def __str__(self): - return self.message.format(self.mountpoint) - - -class NotMountPointError(MountError): - - message = '"{}" is not a mountpoint.' - - -class NotS3qlFsError(MountError): - - message = '"{}" is not an S3QL file system.' - - -class UmountError(MountError): - - message = 'Error while unmounting "{}".' - - -class MountInUseError(MountError): - - message = '"{}" is being used.' + return self.message +class NotMountPointError(UmountError): + message = 'Not a mountpoint.' + exitcode = 1 +class NotS3qlFsError(UmountError): + message = 'Not an S3QL file system.' + exitcode = 2 + +class UmountSubError(UmountError): + message = 'Unmount subprocess failed.' + exitcode = 3 + +class MountInUseError(UmountError): + message = 'In use.' + exitcode = 4 + +class FSCrashedError(UmountError): + message = 'File system seems to have crashed.' + exitcode = 5 + def check_mount(mountpoint): '''Check that "mountpoint" is a mountpoint and a valid s3ql fs''' + try: + os.stat(mountpoint) + except OSError as exc: + if exc.errno is errno.ENOTCONN: + raise FSCrashedError(mountpoint) + raise + if not posixpath.ismount(mountpoint): raise NotMountPointError(mountpoint) @@ -102,7 +110,7 @@ def lazy_umount(mountpoint): else: umount_cmd = ('fusermount', '-u', '-z', mountpoint) - if subprocess.call(umount_cmd)!=0: + if subprocess.call(umount_cmd) != 0: raise UmountError(mountpoint) def blocking_umount(mountpoint): @@ -193,23 +201,24 @@ def main(args=None): try: umount(options.mountpoint, options.lazy) - except NotMountPointError as err: - print(err, file=sys.stderr) - sys.exit(1) - except NotS3qlFsError as err: - print(err, file=sys.stderr) - sys.exit(2) - except UmountError as err: - print(err, file=sys.stderr) - sys.exit(3) - except MountInUseError: + except MountInUseError as err: print('Cannot unmount, the following processes still access the mountpoint:', file=sys.stderr) subprocess.call(['fuser', '-v', '-m', options.mountpoint], stdout=sys.stderr, stderr=sys.stderr) - sys.exit(4) - else: - sys.exit(0) + sys.exit(err.exitcode) + + except FSCrashedError as err: + print('%s: %s' % (options.mountpoint, err), file=sys.stderr) + print("Unmounting with the 'umount' or 'fusermount -u' command may help " + "in this situation.") + sys.exit(err.exitcode) + + except UmountError as err: + print('%s: %s' % (options.mountpoint, err), file=sys.stderr) + sys.exit(err.exitcode) + + sys.exit(0) if __name__ == '__main__': main(sys.argv[1:]) diff --git a/tests/t1_backends.py b/tests/t1_backends.py index f9c8069..2c2a002 100644 --- a/tests/t1_backends.py +++ b/tests/t1_backends.py @@ -152,7 +152,7 @@ class S3Tests(BackendTestsMixin, TestCase): # be much longer for larger objects, but for tests this is usually enough. self.delay = 15 - self.backend = s3.Backend(*self.get_credentials('s3-test')) + self.backend = s3.Backend(*self.get_credentials('s3-test'), use_ssl=False) def tearDown(self): self.backend.clear() @@ -171,14 +171,20 @@ class S3Tests(BackendTestsMixin, TestCase): config.read(authfile) try: - bucket_name = config.get(name, 'test-fs') + fs_name = config.get(name, 'test-fs') backend_login = config.get(name, 'backend-login') backend_password = config.get(name, 'backend-password') except (ConfigParser.NoOptionError, ConfigParser.NoSectionError): self.skipTest("Authentication file does not have test section") - return (bucket_name, backend_login, backend_password) + return (fs_name, backend_login, backend_password) +class S3SSLTests(S3Tests): + def setUp(self): + self.name_cnt = 0 + self.delay = 15 + self.backend = s3.Backend(*self.get_credentials('s3-test'), use_ssl=True) + class SwiftTests(S3Tests): def setUp(self): self.name_cnt = 0 @@ -189,13 +195,13 @@ class GSTests(S3Tests): def setUp(self): self.name_cnt = 0 self.delay = 15 - self.backend = gs.Backend(*self.get_credentials('gs-test')) - + self.backend = gs.Backend(*self.get_credentials('gs-test'), use_ssl=False) + class S3CTests(S3Tests): def setUp(self): self.name_cnt = 0 self.delay = 0 - self.backend = s3c.Backend(*self.get_credentials('s3c-test')) + self.backend = s3c.Backend(*self.get_credentials('s3c-test'), use_ssl=False) class URLTests(TestCase): diff --git a/tests/t3_fsck.py b/tests/t3_fsck.py index bf4bea9..a279c57 100644 --- a/tests/t3_fsck.py +++ b/tests/t3_fsck.py @@ -194,11 +194,11 @@ class fsck_tests(TestCase): self.db.execute('UPDATE names SET refcount=refcount+1 WHERE id=?', (name_id,)) return name_id - def _link(self, name, inode): + def _link(self, name, inode, parent_inode=ROOT_INODE): '''Link /*name* to *inode*''' self.db.execute('INSERT INTO contents (name_id, inode, parent_inode) VALUES(?,?,?)', - (self._add_name(name), inode, ROOT_INODE)) + (self._add_name(name), inode, parent_inode)) def test_inodes_size(self): @@ -462,7 +462,44 @@ class fsck_tests(TestCase): self.fsck.check_unix() self.assertTrue(self.fsck.found_errors) - def test_symlink_no_target(self): + def test_unix_nomode_reg(self): + + perms = stat.S_IRUSR | stat.S_IWUSR | stat.S_IROTH | stat.S_IRGRP + stamp = time.time() + inode = self.db.rowid("INSERT INTO inodes (mode,uid,gid,mtime,atime,ctime,refcount) " + "VALUES (?,?,?,?,?,?,?)", + (perms, os.getuid(), os.getgid(), stamp, stamp, stamp, 1)) + self._link('test-entry', inode) + + self.assert_fsck(self.fsck.check_unix) + + newmode = self.db.get_val('SELECT mode FROM inodes WHERE id=?', (inode,)) + self.assertEqual(stat.S_IMODE(newmode), perms) + self.assertEqual(stat.S_IFMT(newmode), stat.S_IFREG) + + def test_unix_nomode_dir(self): + + perms = stat.S_IRUSR | stat.S_IWUSR | stat.S_IROTH | stat.S_IRGRP + stamp = time.time() + inode = self.db.rowid("INSERT INTO inodes (mode,uid,gid,mtime,atime,ctime,refcount) " + "VALUES (?,?,?,?,?,?,?)", + (perms, os.getuid(), os.getgid(), stamp, stamp, stamp, 1)) + inode2 = self.db.rowid("INSERT INTO inodes (mode,uid,gid,mtime,atime,ctime,refcount) " + "VALUES (?,?,?,?,?,?,?)", + (perms | stat.S_IFREG, os.getuid(), os.getgid(), stamp, + stamp, stamp, 1)) + + self._link('test-entry', inode) + self._link('subentry', inode2, inode) + + self.assert_fsck(self.fsck.check_unix) + + newmode = self.db.get_val('SELECT mode FROM inodes WHERE id=?', (inode,)) + self.assertEqual(stat.S_IMODE(newmode), perms) + self.assertEqual(stat.S_IFMT(newmode), stat.S_IFDIR) + + + def test_unix_symlink_no_target(self): inode = self.db.rowid("INSERT INTO inodes (mode,uid,gid,mtime,atime,ctime,refcount) " "VALUES (?,?,?,?,?,?,?)", diff --git a/tests/t4_fuse.py b/tests/t4_fuse.py index acbe926..4f4a4bd 100644 --- a/tests/t4_fuse.py +++ b/tests/t4_fuse.py @@ -160,7 +160,7 @@ class fuse_tests(TestCase): # We need this to test multi block operations self.src = __file__ if os.path.getsize(self.src) < 1048: - raise RuntimeError("test file %s should be bigger than 1 kb" % self.src) + raise RuntimeError("test file %s should be bigger than 1 KiB" % self.src) self.mnt_dir = tempfile.mkdtemp() self.cache_dir = tempfile.mkdtemp() |