X-Git-Url: https://irasnyder.com/gitweb/?a=blobdiff_plain;f=PAR2Set%2FJoin.py;h=34c4996c709c2ba98e6f1b68ef1d8f2693b9abfc;hb=663cfde9556accb7d3e24227dec20e2bc84e431d;hp=234ca2b23ee7ae76ddd566bbc3564b5b41765047;hpb=896ca43ecafc98cc2b1045a5ad49adb05dac937c;p=rarslave2.git diff --git a/PAR2Set/Join.py b/PAR2Set/Join.py index 234ca2b..34c4996 100644 --- a/PAR2Set/Join.py +++ b/PAR2Set/Join.py @@ -1,39 +1,80 @@ #!/usr/bin/env python # vim: set ts=4 sts=4 sw=4 textwidth=92: -import logging -import PAR2Set.Base -import rsutil.common +""" +Holds the Join class. + +This module works with normal joined sets. + +It will detect sets like the following: +X.par2 +X.vol0+1.par2 +... + +X.001 +X.002 +... +Where the PAR2 files protect a file named X.avi, or similar other types. +It will not work where the PAR2 files are protecting the X.001, etc files +directly. +""" + +__author__ = "Ira W. Snyder (devel@irasnyder.com)" +__copyright__ = "Copyright (c) 2006,2007 Ira W. Snyder (devel@irasnyder.com)" +__license__ = "GNU GPL v2 (or, at your option, any later version)" + +# Join.py # -# This is a regular joined file type +# Copyright (C) 2006,2007 Ira W. Snyder (devel@irasnyder.com) # -# It will detect sets like the following: -# X.par2 -# X.vol0+1.par2 -# X.vol1+2.par2 -# X.001 -# X.002 -# X.003 +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # -# Where the PAR2 files protect a file named X.avi (or similar). It will not -# work where the PAR2 files are protecting the .001, etc files directly. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import re +import os +import logging +import PAR2Set.Base +import rsutil.common + def detector (name_files, prot_files): + """Detects a Join set""" + return rsutil.common.has_a_match ('^.*\.\d\d\d$', name_files) \ and not rsutil.common.has_a_match ('^.*\.\d\d\d$', prot_files) class Join (PAR2Set.Base.Base): + """Class for normal joined-file sets""" + def __repr__ (self): return 'JOIN' def find_joinfiles (self): + """Finds files which contain data to be joined together""" + return rsutil.common.find_matches ('^.*\.\d\d\d$', self.name_matched_files) def runVerifyAndRepair (self): + """Verify and Repair a PAR2Set. This version extends the PAR2Set.Base.Base + version by adding the datafiles to be joined at the end of the command + line. + + This is done using the par2repair command by default""" + PAR2_CMD = rsutil.common.config_get_value ('commands', 'par2repair') # assemble the command @@ -57,11 +98,30 @@ class Join (PAR2Set.Base.Base): return rsutil.common.SUCCESS + def find_deleteable_files (self): + """Find all files which are deletable by using the regular expression from the + configuration file""" + + DELETE_REGEX = rsutil.common.config_get_value ('regular expressions', 'delete_regex') + dregex = re.compile (DELETE_REGEX, re.IGNORECASE) + + return [f for f in self.all_files if dregex.match (f) and \ + f not in self.prot_matched_files] + def find_extraction_heads (self): + """Find the extraction heads. Since this should not be an extractable set, + we return the files which are protected directly by the PAR2 files.""" + return self.prot_matched_files def extraction_function (self, file, todir): - """Extract a single file of this type to the given directory""" + """Extract a single file of the Join type. + + file -- the file to extract + todir -- the directory to extract to + + This command ignores the extraction if file and todir+file are the same + file. This keeps things like mv working smoothly.""" NOEXTRACT_CMD = rsutil.common.config_get_value ('commands', 'noextract')