/stdhome

To get this branch, use:
bzr branch http://bzr.ed.am/stdhome
8 by Tim Marston
added diff command; moved all command to commands subdir; made stage-revert
1
# copy_out.py
5 by Tim Marston
moved copy-in, copy-out and deployment conflict checking to a set of "walkers";
2
#
3
# Copyright (C) 2013 to 2014 Tim Marston <tim@edm.am>
4
#
5
# This file is part of stdhome (hereafter referred to as "this program").
6
# See http://ed.am/dev/stdhome for more information.
7
#
8
# This program is free software: you can redistribute it and/or modify
9
# it under the terms of the GNU General Public License as published by
10
# the Free Software Foundation, either version 3 of the License, or
11
# (at your option) any later version.
12
#
13
# This program is distributed in the hope that it will be useful,
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
# GNU General Public License for more details.
17
#
18
# You should have received a copy of the GNU General Public License
19
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
21
23 by Tim Marston
implemented CopyInWalker in terms of CopyBaseWalker, changed implementation of
22
import re
20 by Tim Marston
moved funcitonality of copy-out walker in to base class and made copy-out walker
23
from copy_base import CopyBaseWalker
5 by Tim Marston
moved copy-in, copy-out and deployment conflict checking to a set of "walkers";
24
import stdhome.the as the
27 by Tim Marston
got symlink accept lists working; fixed some walker bugs
25
from stdhome.file_matcher import FileMatcher
5 by Tim Marston
moved copy-in, copy-out and deployment conflict checking to a set of "walkers";
26
27
20 by Tim Marston
moved funcitonality of copy-out walker in to base class and made copy-out walker
28
class CopyOutWalker( CopyBaseWalker ):
5 by Tim Marston
moved copy-in, copy-out and deployment conflict checking to a set of "walkers";
29
	"""The copy-out walker traverses the repo, copying its content to the home
27 by Tim Marston
got symlink accept lists working; fixed some walker bugs
30
	directory.  During an update, it is run *after* checking for conflicts that
31
	might occur during copy-out, so any conflicts that exist can be assumed to
32
	be unimportant and disposable.  In other words, this will happily overwrite
33
	stuff in the home directory, without regard to its content.
5 by Tim Marston
moved copy-in, copy-out and deployment conflict checking to a set of "walkers";
34
35
	Walker source:       repo
36
	Walker destination:  home dir
37
	Walker traversing:   repo (or a provided file list, which may include stuff
38
							that no longer exists in the repo
39
	"""
40
61 by Tim Marston
added home directory change reporting to CopyOutWalker; added --quiet option to
41
	def __init__( self, walk_files = None, quiet = False ):
39 by Tim Marston
implemented ignore lists in copyer and made symlink substitution work only one
42
		CopyBaseWalker.__init__( self )
5 by Tim Marston
moved copy-in, copy-out and deployment conflict checking to a set of "walkers";
43
		self.src_dir = the.repo.full_dir
8 by Tim Marston
added diff command; moved all command to commands subdir; made stage-revert
44
		self.dst_dir = the.full_home_dir
27 by Tim Marston
got symlink accept lists working; fixed some walker bugs
45
		self.walk_list = walk_files if walk_files is not None else \
42 by Tim Marston
defaulted Walker.generate_walk_list() to act on the.repo.full_dir
46
						 self.generate_walk_list()
39 by Tim Marston
implemented ignore lists in copyer and made symlink substitution work only one
47
		self.check_dst_symlinks = True
48
		self.check_dst_ignores = True
61 by Tim Marston
added home directory change reporting to CopyOutWalker; added --quiet option to
49
		self.quiet = quiet
50
51
52
	def print_op( self, rel_file, src, op, dst ):
53
54
		# report changes
55
		if not self.quiet and the.verbose < 2 and op == '*':
56
			if dst == '_':
57
				print " N  %s" % ( rel_file )
58
			elif src == '_':
59
				print " D  %s" % ( rel_file )
60
			elif src == dst:
61
				print " M  %s" % ( rel_file )
62
			else:
63
				print " K  %s" % ( rel_file )
64
65
		# verbose reporting
66
		if the.verbose >= 2:
67
			if op == '*': op = '<'
68
			print "  %s%s%s %s" % ( src, op, dst, rel_file )