Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 30307 | Differences between
and this patch

Collapse All | Expand All

(-)rdiff-backup/rdiff-backup/rdiff_backup/regress.py (-13 / +9 lines)
Lines 114-140 Link Here
114
def iterate_raw_rfs(mirror_rp, inc_rp):
114
def iterate_raw_rfs(mirror_rp, inc_rp):
115
	"""Iterate all RegressFile objects in mirror/inc directory
115
	"""Iterate all RegressFile objects in mirror/inc directory
116
116
117
	Also changes permissions of unreadable files to allow access and
117
	Also changes permissions of unreadable files.  We don't have to
118
	then changes them back later.
118
	change them back later because regress will do that for us.
119
119
120
	"""
120
	"""
121
	root_rf = RegressFile(mirror_rp, inc_rp, restore.get_inclist(inc_rp))
121
	root_rf = RegressFile(mirror_rp, inc_rp, restore.get_inclist(inc_rp))
122
	def helper(rf):
122
	def helper(rf):
123
		mirror_rp = rf.mirror_rp
123
		mirror_rp = rf.mirror_rp
124
		if (Globals.process_uid != 0 and
124
		if Globals.process_uid != 0:
125
			((mirror_rp.isreg() and not mirror_rp.readable()) or
125
			if mirror_rp.isreg() and not mirror_rp.readable():
126
			 (mirror_rp.isdir() and not mirror_rp.hasfullperms()))):
126
				mirror_rp.chmod(0400 | mirror_rp.getperms())
127
			unreadable, old_perms = 1, mirror_rp.getperms()
127
			elif mirror_rp.isdir() and not mirror_rp.hasfullperms():
128
			if mirror_rp.isreg(): mirror_rp.chmod(0400 | old_perms)
128
				mirror_rp.chmod(0700 | mirror_rp.getperms())
129
			else: mirror_rp.chmod(0700 | old_perms)
130
		else: unreadable = 0
131
		yield rf
129
		yield rf
132
		if unreadable and mirror_rp.isreg(): mirror_rp.chmod(old_perms)
133
		if rf.mirror_rp.isdir() or rf.inc_rp.isdir():
130
		if rf.mirror_rp.isdir() or rf.inc_rp.isdir():
134
			for sub_rf in rf.yield_sub_rfs():
131
			for sub_rf in rf.yield_sub_rfs():
135
				for sub_sub_rf in helper(sub_rf):
132
				for sub_sub_rf in helper(sub_rf):
136
					yield sub_sub_rf
133
					yield sub_sub_rf
137
		if unreadable and mirror_rp.isdir(): mirror_rp.chmod(old_perms)
138
	return helper(root_rf)
134
	return helper(root_rf)
139
135
140
def yield_metadata():
136
def yield_metadata():
Lines 249-262 Link Here
249
		if rf.mirror_rp.isreg():
245
		if rf.mirror_rp.isreg():
250
			tf = TempFile.new(rf.mirror_rp)
246
			tf = TempFile.new(rf.mirror_rp)
251
			tf.write_from_fileobj(rf.get_restore_fp())
247
			tf.write_from_fileobj(rf.get_restore_fp())
252
			rpath.copy_attribs(rf.metadata_rorp, tf)
253
			tf.fsync_with_dir() # make sure tf fully written before move
248
			tf.fsync_with_dir() # make sure tf fully written before move
249
			rpath.copy_attribs(rf.metadata_rorp, tf)
254
			rpath.rename(tf, rf.mirror_rp) # move is atomic
250
			rpath.rename(tf, rf.mirror_rp) # move is atomic
255
		else:
251
		else:
256
			if rf.mirror_rp.lstat(): rf.mirror_rp.delete()
252
			if rf.mirror_rp.lstat(): rf.mirror_rp.delete()
257
			rf.mirror_rp.write_from_fileobj(rf.get_restore_fp())
253
			rf.mirror_rp.write_from_fileobj(rf.get_restore_fp())
258
			rpath.copy_attribs(rf.metadata_rorp, rf.mirror_rp)
254
			rpath.copy_attribs(rf.metadata_rorp, rf.mirror_rp)
259
		rf.mirror_rp.fsync_with_dir() # require move before inc delete
255
		rf.mirror_rp.get_parent_rp().fsync() # require move before inc delete
260
256
261
	def start_process(self, index, rf):
257
	def start_process(self, index, rf):
262
		"""Start processing directory"""
258
		"""Start processing directory"""

Return to bug 30307