Patchwork D10132: rhg: Ignore trailing newlines in .hg/sharedpath

login
register
mail settings
Submitter phabricator
Date March 9, 2021, 9:41 a.m.
Message ID <differential-rev-PHID-DREV-iufmfozl44wn2ymzssdx-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/48447/
State Superseded
Headers show

Comments

phabricator - March 9, 2021, 9:41 a.m.
SimonSapin created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D10132

AFFECTED FILES
  rust/hg-core/src/repo.rs
  rust/hg-core/src/utils.rs

CHANGE DETAILS




To: SimonSapin, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/rust/hg-core/src/utils.rs b/rust/hg-core/src/utils.rs
--- a/rust/hg-core/src/utils.rs
+++ b/rust/hg-core/src/utils.rs
@@ -67,6 +67,7 @@ 
 }
 
 pub trait SliceExt {
+    fn trim_end_newlines(&self) -> &Self;
     fn trim_end(&self) -> &Self;
     fn trim_start(&self) -> &Self;
     fn trim(&self) -> &Self;
@@ -80,6 +81,13 @@ 
 }
 
 impl SliceExt for [u8] {
+    fn trim_end_newlines(&self) -> &[u8] {
+        if let Some(last) = self.iter().rposition(|&byte| byte != b'\n') {
+            &self[..=last]
+        } else {
+            &[]
+        }
+    }
     fn trim_end(&self) -> &[u8] {
         if let Some(last) = self.iter().rposition(is_not_whitespace) {
             &self[..=last]
diff --git a/rust/hg-core/src/repo.rs b/rust/hg-core/src/repo.rs
--- a/rust/hg-core/src/repo.rs
+++ b/rust/hg-core/src/repo.rs
@@ -1,8 +1,8 @@ 
 use crate::config::{Config, ConfigError, ConfigParseError};
 use crate::errors::{HgError, IoErrorContext, IoResultExt};
 use crate::requirements;
-use crate::utils::current_dir;
 use crate::utils::files::get_path_from_bytes;
+use crate::utils::{current_dir, SliceExt};
 use memmap::{Mmap, MmapOptions};
 use std::collections::HashSet;
 use std::path::{Path, PathBuf};
@@ -120,7 +120,8 @@ 
             store_path = dot_hg.join("store");
         } else {
             let bytes = hg_vfs.read("sharedpath")?;
-            let mut shared_path = get_path_from_bytes(&bytes).to_owned();
+            let mut shared_path =
+                get_path_from_bytes(bytes.trim_end_newlines()).to_owned();
             if relative {
                 shared_path = dot_hg.join(shared_path)
             }