Home | History | Annotate | Line # | Download | only in common
      1 #! /usr/bin/python2.6
      2 #
      3 # CDDL HEADER START
      4 #
      5 # The contents of this file are subject to the terms of the
      6 # Common Development and Distribution License (the "License").
      7 # You may not use this file except in compliance with the License.
      8 #
      9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10 # or http://www.opensolaris.org/os/licensing.
     11 # See the License for the specific language governing permissions
     12 # and limitations under the License.
     13 #
     14 # When distributing Covered Code, include this CDDL HEADER in each
     15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16 # If applicable, add the following below this CDDL HEADER, with the
     17 # fields enclosed by brackets "[]" replaced with your own identifying
     18 # information: Portions Copyright [yyyy] [name of copyright owner]
     19 #
     20 # CDDL HEADER END
     21 #
     22 # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
     23 #
     24 
     25 """This module implements the "zfs holds" subcommand.
     26 The only public interface is the zfs.holds.do_holds() function."""
     27 
     28 import optparse
     29 import sys
     30 import errno
     31 import time
     32 import zfs.util
     33 import zfs.dataset
     34 import zfs.table
     35 
     36 _ = zfs.util._
     37 
     38 def do_holds():
     39 	"""Implements the "zfs holds" subcommand."""
     40 	def usage(msg=None):
     41 		parser.print_help()
     42 		if msg:
     43 			print
     44 			parser.exit("zfs: error: " + msg)
     45 		else:
     46 			parser.exit()
     47 
     48 	u = _("""holds [-r] <snapshot> ...""")
     49 
     50 	parser = optparse.OptionParser(usage=u, prog="zfs")
     51 
     52 	parser.add_option("-r", action="store_true", dest="recursive",
     53 	    help=_("list holds recursively"))
     54 
     55 	(options, args) = parser.parse_args(sys.argv[2:])
     56 
     57 	if len(args) < 1:
     58 		usage(_("missing snapshot argument"))
     59 
     60 	fields = ("name", "tag", "timestamp")
     61 	rjustfields = ()
     62 	printing = False 
     63 	gotone = False
     64 	t = zfs.table.Table(fields, rjustfields) 
     65 	for ds in zfs.dataset.snapshots_fromcmdline(args, options.recursive):
     66 		gotone = True
     67 		for tag, tm in ds.get_holds().iteritems():
     68 			val = {"name": ds.name, "tag": tag,
     69 			    "timestamp": time.ctime(tm)}
     70 			t.addline(ds.name, val)
     71 			printing = True
     72 	if printing:
     73 		t.printme()
     74 	elif not gotone:
     75 		raise zfs.util.ZFSError(errno.ENOENT, _("no matching datasets"))
     76