Mercurial > hg-stable
comparison rust/hg-core/src/repo.rs @ 49201:a932cad26d37
branching: merge stable into default
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Wed, 04 May 2022 18:17:44 +0200 |
parents | 10b9f11daf15 f2ef6a4f918f |
children | 90a15199cbc6 |
comparison
equal
deleted
inserted
replaced
49200:10b9f11daf15 | 49201:a932cad26d37 |
---|---|
422 let map = self.dirstate_map()?; | 422 let map = self.dirstate_map()?; |
423 // TODO: Maintain a `DirstateMap::dirty` flag, and return early here if | 423 // TODO: Maintain a `DirstateMap::dirty` flag, and return early here if |
424 // it’s unset | 424 // it’s unset |
425 let parents = self.dirstate_parents()?; | 425 let parents = self.dirstate_parents()?; |
426 let (packed_dirstate, old_uuid_to_remove) = if self.has_dirstate_v2() { | 426 let (packed_dirstate, old_uuid_to_remove) = if self.has_dirstate_v2() { |
427 let uuid = self.dirstate_data_file_uuid.get_or_init(self)?; | 427 let uuid_opt = self.dirstate_data_file_uuid.get_or_init(self)?; |
428 let mut uuid = uuid.as_ref(); | 428 let uuid_opt = uuid_opt.as_ref(); |
429 let can_append = uuid.is_some(); | 429 let can_append = uuid_opt.is_some(); |
430 let (data, tree_metadata, append, old_data_size) = | 430 let (data, tree_metadata, append, old_data_size) = |
431 map.pack_v2(can_append)?; | 431 map.pack_v2(can_append)?; |
432 if !append { | 432 |
433 uuid = None | 433 // Reuse the uuid, or generate a new one, keeping the old for |
434 } | 434 // deletion. |
435 let (uuid, old_uuid) = if let Some(uuid) = uuid { | 435 let (uuid, old_uuid) = match uuid_opt { |
436 let as_str = std::str::from_utf8(uuid) | 436 Some(uuid) => { |
437 .map_err(|_| { | 437 let as_str = std::str::from_utf8(uuid) |
438 HgError::corrupted("non-UTF-8 dirstate data file ID") | 438 .map_err(|_| { |
439 })? | 439 HgError::corrupted( |
440 .to_owned(); | 440 "non-UTF-8 dirstate data file ID", |
441 let old_uuid_to_remove = Some(as_str.to_owned()); | 441 ) |
442 (as_str, old_uuid_to_remove) | 442 })? |
443 } else { | 443 .to_owned(); |
444 (DirstateDocket::new_uid(), None) | 444 if append { |
445 (as_str, None) | |
446 } else { | |
447 (DirstateDocket::new_uid(), Some(as_str)) | |
448 } | |
449 } | |
450 None => (DirstateDocket::new_uid(), None), | |
445 }; | 451 }; |
452 | |
446 let data_filename = format!("dirstate.{}", uuid); | 453 let data_filename = format!("dirstate.{}", uuid); |
447 let data_filename = self.hg_vfs().join(data_filename); | 454 let data_filename = self.hg_vfs().join(data_filename); |
448 let mut options = std::fs::OpenOptions::new(); | 455 let mut options = std::fs::OpenOptions::new(); |
449 if append { | 456 if append { |
450 options.append(true); | 457 options.append(true); |