diff options
author | ben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109> | 2002-03-21 07:34:29 +0000 |
---|---|---|
committer | ben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109> | 2002-03-21 07:34:29 +0000 |
commit | a2e3c38d72877dd9142d802e76047e10cf490e19 (patch) | |
tree | fd912dd37d0afe96adf760606d65f7b302c0678e /rdiff-backup/rdiff_backup/rorpiter.py | |
parent | 8c37a5bdfdd46d5cfad6e9d67925ddef9ca382bf (diff) | |
download | rdiff-backup-a2e3c38d72877dd9142d802e76047e10cf490e19.tar.gz |
Added hardlink support, refactored some test cases
git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@7 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109
Diffstat (limited to 'rdiff-backup/rdiff_backup/rorpiter.py')
-rw-r--r-- | rdiff-backup/rdiff_backup/rorpiter.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/rdiff-backup/rdiff_backup/rorpiter.py b/rdiff-backup/rdiff_backup/rorpiter.py index 5740ef8..e98fa13 100644 --- a/rdiff-backup/rdiff_backup/rorpiter.py +++ b/rdiff-backup/rdiff_backup/rorpiter.py @@ -61,7 +61,9 @@ class RORPIter: if rp.isplaceholder(): yield rp else: rorp = rp.getRORPath() - if rp.isreg(): rorp.setfile(Rdiff.get_signature(rp)) + if rp.isreg(): + if rp.isflaglinked(): rorp.flaglinked() + else: rorp.setfile(Rdiff.get_signature(rp)) yield rorp def GetSignatureIter(base_rp): @@ -172,7 +174,12 @@ class RORPIter: def diffonce(sig_rorp, new_rp): """Return one diff rorp, based from signature rorp and orig rp""" - if sig_rorp and sig_rorp.isreg() and new_rp and new_rp.isreg(): + if sig_rorp and Globals.preserve_hardlinks and sig_rorp.isflaglinked(): + if new_rp: diff_rorp = new_rp.getRORPath() + else: diff_rorp = RORPath(sig_rorp.index) + diff_rorp.flaglinked() + return diff_rorp + elif sig_rorp and sig_rorp.isreg() and new_rp and new_rp.isreg(): diff_rorp = new_rp.getRORPath() diff_rorp.setfile(Rdiff.get_delta_sigfileobj(sig_rorp.open("rb"), new_rp)) @@ -201,7 +208,12 @@ class RORPIter: if not diff_rorp.lstat(): return RobustAction(lambda: None, basisrp.delete, lambda e: None) - if basisrp and basisrp.isreg() and diff_rorp.isreg(): + if Globals.preserve_hardlinks and diff_rorp.isflaglinked(): + if not basisrp: basisrp = base_rp.new_index(diff_rorp.index) + return RobustAction(lambda: None, + lambda: Hardlink.link_rp(diff_rorp, basisrp), + lambda e: None) + elif basisrp and basisrp.isreg() and diff_rorp.isreg(): assert diff_rorp.get_attached_filetype() == 'diff' return Rdiff.patch_with_attribs_action(basisrp, diff_rorp) else: # Diff contains whole file, just copy it over |