src/pxar/encoder.rs: refactoring of match_exclude_pattern()
match_exclude_pattern() does not need a '&mut self' reference to the encoder, move it therefore out of the impl. Further, this patch contains some naming and formatting cosmetics. Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						
						Dietmar Maurer
					
				
			
			
				
	
			
			
			
						parent
						
							3ff4ef28e6
						
					
				
				
					commit
					9f8fcdd050
				
			@ -652,12 +652,12 @@ impl <'a, W: Write> Encoder<'a, W> {
 | 
			
		||||
                    Err(err) => bail!("fstat {:?} failed - {}", self.full_path(), err),
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                match self.match_exclude_pattern(&filename, &stat, &local_match_pattern) {
 | 
			
		||||
                match match_exclude_pattern(&filename, &stat, &local_match_pattern) {
 | 
			
		||||
                    (MatchType::Exclude, _) => {
 | 
			
		||||
                        let filename_osstr = std::ffi::OsStr::from_bytes(filename.to_bytes());
 | 
			
		||||
                        eprintln!("matched by .pxarexclude entry - skipping: {:?}", self.full_path().join(filename_osstr));
 | 
			
		||||
                    },
 | 
			
		||||
                    (_, pattern_list) => name_list.push((filename, stat, pattern_list)),
 | 
			
		||||
                    (_, child_pattern) => name_list.push((filename, stat, child_pattern)),
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if name_list.len() > MAX_DIRECTORY_ENTRIES {
 | 
			
		||||
@ -825,36 +825,6 @@ impl <'a, W: Write> Encoder<'a, W> {
 | 
			
		||||
        Ok(())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // If there is a match, an updated PxarExcludePattern list to pass to the matched child is returned.
 | 
			
		||||
    fn match_exclude_pattern(&mut self, filename: &CStr, stat: &FileStat, match_pattern: &Vec<PxarExcludePattern>) -> (MatchType, Vec<PxarExcludePattern>) {
 | 
			
		||||
        let mut child_pattern = Vec::new();
 | 
			
		||||
        let mut match_type = MatchType::None;
 | 
			
		||||
        let is_dir = is_directory(&stat);
 | 
			
		||||
 | 
			
		||||
        for pattern in match_pattern {
 | 
			
		||||
            match pattern.matches_filename(filename, is_dir) {
 | 
			
		||||
                MatchType::None => {},
 | 
			
		||||
                MatchType::Exclude => match_type = MatchType::Exclude,
 | 
			
		||||
                MatchType::Include => match_type = MatchType::Include,
 | 
			
		||||
                MatchType::PartialExclude => {
 | 
			
		||||
                    if match_type != MatchType::Include && match_type != MatchType::Exclude {
 | 
			
		||||
                        match_type = MatchType::PartialExclude;
 | 
			
		||||
                    }
 | 
			
		||||
                    child_pattern.push(pattern.get_rest_pattern());
 | 
			
		||||
                },
 | 
			
		||||
                MatchType::PartialInclude => {
 | 
			
		||||
                    if match_type != MatchType::Include && match_type != MatchType::Exclude {
 | 
			
		||||
                        // always include partial matches, as we need to match children to decide
 | 
			
		||||
                        match_type = MatchType::PartialInclude;
 | 
			
		||||
                    }
 | 
			
		||||
                    child_pattern.push(pattern.get_rest_pattern());
 | 
			
		||||
                },
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        (match_type, child_pattern)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn encode_file(&mut self, filefd: RawFd, stat: &FileStat, magic: i64)  -> Result<(), Error> {
 | 
			
		||||
 | 
			
		||||
        //println!("encode_file: {:?}", self.full_path());
 | 
			
		||||
@ -1043,6 +1013,38 @@ impl <'a, W: Write> Encoder<'a, W> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// If there is a match, an updated PxarExcludePattern list to pass to the matched child is returned.
 | 
			
		||||
fn match_exclude_pattern(
 | 
			
		||||
    filename: &CStr,
 | 
			
		||||
    stat: &FileStat,
 | 
			
		||||
    match_pattern: &Vec<PxarExcludePattern>
 | 
			
		||||
) ->  (MatchType, Vec<PxarExcludePattern>) {
 | 
			
		||||
    let mut child_pattern = Vec::new();
 | 
			
		||||
    let mut match_state = MatchType::None;
 | 
			
		||||
 | 
			
		||||
    for pattern in match_pattern {
 | 
			
		||||
        match pattern.matches_filename(filename, is_directory(&stat)) {
 | 
			
		||||
            MatchType::None =>  {},
 | 
			
		||||
            MatchType::Exclude =>  match_state = MatchType::Exclude,
 | 
			
		||||
            MatchType::Include =>  match_state = MatchType::Include,
 | 
			
		||||
            MatchType::PartialExclude =>  {
 | 
			
		||||
                if match_state != MatchType::Exclude && match_state != MatchType::Include {
 | 
			
		||||
                    match_state = MatchType::PartialExclude;
 | 
			
		||||
                }
 | 
			
		||||
                child_pattern.push(pattern.get_rest_pattern());
 | 
			
		||||
            },
 | 
			
		||||
            MatchType::PartialInclude =>  {
 | 
			
		||||
                if match_state != MatchType::Exclude && match_state != MatchType::Include {
 | 
			
		||||
                    match_state = MatchType::PartialInclude;
 | 
			
		||||
                }
 | 
			
		||||
                child_pattern.push(pattern.get_rest_pattern());
 | 
			
		||||
            },
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    (match_state, child_pattern)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn errno_is_unsupported(errno: Errno) -> bool {
 | 
			
		||||
 | 
			
		||||
    match errno {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user