(&self)
| 104 | |
| 105 | |
| 106 | fn internal_start(&self) -> Result<(), Recovery> { |
| 107 | |
| 108 | let total_page_size = if self.source_total_page_size < DEFAULT_PAGE_SIZE { DEFAULT_PAGE_SIZE } else { self.source_total_page_size }; |
| 109 | let source_path = format!("{}/{}", self.root, self.source_name); |
| 110 | let sync_path = format!("{}/{}", self.root, self.sync_name()); |
| 111 | |
| 112 | // not exist source_path |
| 113 | if !Path::new(&source_path).is_dir() { |
| 114 | return Err(Recovery::UnRecoverable("folder not exist".to_owned())) |
| 115 | } |
| 116 | |
| 117 | |
| 118 | if !Path::new(&sync_path).is_dir() { |
| 119 | if let Err(e) = fs::create_dir(&sync_path) { |
| 120 | return Err(Recovery::UnRecoverable(e.to_string())) |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | // page_index |
| 125 | let mut page_index = 1; |
| 126 | |
| 127 | loop { |
| 128 | |
| 129 | let page_pointer = total_page_size * page_index; |
| 130 | let source_name = filename_factory(&source_path, page_pointer); |
| 131 | |
| 132 | page_index += 1; |
| 133 | |
| 134 | |
| 135 | // filename not exist return Ok |
| 136 | if !Path::new(&source_name).is_file() { |
| 137 | return Ok(()) |
| 138 | } |
| 139 | |
| 140 | |
| 141 | // prepare source_page_name |
| 142 | let source_page_name = match self.sync_name { |
| 143 | Sync::Overwrite => { |
| 144 | let rename = filename_factory_rename(&source_path, page_pointer); |
| 145 | fs::rename(&source_name, &rename).unwrap(); |
| 146 | rename |
| 147 | } |
| 148 | Sync::New(_) => { |
| 149 | source_name.to_owned() |
| 150 | } |
| 151 | }; |
| 152 | |
| 153 | |
| 154 | // open source_page |
| 155 | let mut source_page = match LogFile::open(&source_page_name) { |
| 156 | Ok(log) => log, |
| 157 | Err(e) => { |
| 158 | let meta = Metadata { |
| 159 | original_filename: source_page_name.to_owned(), |
| 160 | currepted_filename: source_name, |
| 161 | err: e.to_string(), |
| 162 | }; |
| 163 | return Err(Recovery::Recoverable(meta)) |
no test coverage detected