
                         ^    S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  Sr " S S	\5      r	g
)(Additional help about object versioning.    )absolute_import)print_function)division)unicode_literals)HelpProvideram
  
<B>OVERVIEW</B>
  Versioning-enabled buckets maintain noncurrent versions of objects, providing
  a way to un-delete data that you accidentally deleted, or to retrieve older
  versions of your data. Noncurrent objects are ignored by gsutil commands
  unless you indicate it should do otherwise by setting a relevant command flag
  or by including a specific generation number in your command. For example,
  wildcards like ``*`` and ``**`` do not, by themselves, act on noncurrent
  object versions.
  
  When using gsutil cp, you cannot specify a version-specific URL as the
  destination, because writes to Cloud Storage always create a new version.
  Trying to specify a version-specific URL as the destination of ``gsutil cp``
  results in an error. When you specify a noncurrent object as a source in a
  copy command, you always create a new object version and retain the original
  (even when using the command to restore a live version). You can use the 
  ``gsutil mv`` command to simultaneously restore an object version and remove
  the noncurrent copy that was used as the source.

  You can turn versioning on or off for a bucket at any time. Turning
  versioning off leaves existing object versions in place and simply causes
  the bucket to delete the existing live version of the object whenever a new
  version is uploaded.

  Regardless of whether you have enabled versioning on a bucket, every object
  has two associated positive integer fields:

  - the generation, which is updated when a new object replaces an existing
    object with the same name. Note that there is no guarantee that generation
    numbers increase for successive versions, only that each new version has a
    unique generation number.
  - the metageneration, which identifies the metadata generation. It starts
    at 1; is updated every time the metadata (e.g., ACL or Content-Type) for a
    given content generation is updated; and gets reset when the generation
    number changes.

  Of these two integers, only the generation is used when working with versioned
  data. Both generation and metageneration can be used with concurrency control.
  
  To learn more about versioning and concurrency, see the following documentation:
  
  - `Overview of Object Versioning
    <https://cloud.google.com/storage/docs/object-versioning>`_
  - `Guide for using Object Versioning
    <https://cloud.google.com/storage/docs/using-object-versioning>`_
  - The `reference page for the gsutil versioning command
    <https://cloud.google.com/storage/docs/gsutil/commands/versioning>`_
  - `Request preconditions
    <https://cloud.google.com/storage/docs/request-preconditions>`_
c            	       F    \ rS rSrSr\R                  " SSS/SS\0 S9rS	r	g
)CommandOptionsL   r   versionsconcurrencyzconcurrency controladditional_helpz)Object Versioning and Concurrency Control)	help_namehelp_name_aliases	help_typehelp_one_line_summary	help_textsubcommand_help_text N)
__name__
__module____qualname____firstlineno____doc__r   HelpSpec_DETAILED_HELP_TEXT	help_spec__static_attributes__r       *platform/gsutil/gslib/addlhelp/versions.pyr
   r
   L   s/    0 ##&(=>!G#)r   r
   N)
r   
__future__r   r   r   r   gslib.help_providerr   r   r
   r   r   r    <module>r#      s.    / & %  ' ,1 h\ r   