equal
deleted
inserted
replaced
44 let working_directory = repo.working_directory_path(); |
44 let working_directory = repo.working_directory_path(); |
45 let working_directory = cwd.join(working_directory); // Make it absolute |
45 let working_directory = cwd.join(working_directory); // Make it absolute |
46 |
46 |
47 let mut files = vec![]; |
47 let mut files = vec![]; |
48 for file in file_args.iter() { |
48 for file in file_args.iter() { |
|
49 let normalized = cwd.join(&file); |
49 // TODO: actually normalize `..` path segments etc? |
50 // TODO: actually normalize `..` path segments etc? |
50 let normalized = cwd.join(&file); |
51 let dotted = normalized.components().any(|c| c.as_os_str() == ".."); |
|
52 if file == &"." || dotted { |
|
53 let message = "`..` or `.` path segment"; |
|
54 return Err(CommandError::unsupported(message)); |
|
55 } |
51 let stripped = normalized |
56 let stripped = normalized |
52 .strip_prefix(&working_directory) |
57 .strip_prefix(&working_directory) |
53 // TODO: error message for path arguments outside of the repo |
58 // TODO: error message for path arguments outside of the repo |
54 .map_err(|_| CommandError::abort(""))?; |
59 .map_err(|_| CommandError::abort(""))?; |
55 let hg_file = HgPathBuf::try_from(stripped.to_path_buf()) |
60 let hg_file = HgPathBuf::try_from(stripped.to_path_buf()) |