changeset 52377:a48c688d3e80

rhg: set the expected dirstate permissions (0o666 minus umask) This is what Python code does, and users in multiuser environments rely on this behavior. (we've been maintaining a private patch that fixes this for a long time)
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Wed, 27 Nov 2024 15:14:18 +0000
parents 09a36de53b60
children 1802d9afddf7
files rust/hg-core/src/vfs.rs tests/test-dirstate.t
diffstat 2 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/rust/hg-core/src/vfs.rs	Tue Nov 26 16:21:00 2024 +0000
+++ b/rust/hg-core/src/vfs.rs	Wed Nov 27 15:14:18 2024 +0000
@@ -178,7 +178,9 @@
         relative_path: impl AsRef<Path>,
         contents: &[u8],
     ) -> Result<(), HgError> {
-        let mut tmp = tempfile::NamedTempFile::new_in(&self.base)
+        let mut tmp = tempfile::Builder::new()
+            .permissions(std::fs::Permissions::from_mode(0o666))
+            .tempfile_in(&self.base)
             .when_writing_file(&self.base)?;
         tmp.write_all(contents)
             .and_then(|()| tmp.flush())
--- a/tests/test-dirstate.t	Tue Nov 26 16:21:00 2024 +0000
+++ b/tests/test-dirstate.t	Wed Nov 27 15:14:18 2024 +0000
@@ -64,6 +64,13 @@
   $ hg debugstate
   n 644          2 2031-01-01 12:00:00 a
 
+Check that .hg/dirstate permissions are correct
+(there was a bug where rust atomic replace would set permissions 0600,
+which is not what we want)
+
+  $ f --mode .hg/dirstate
+  .hg/dirstate: mode=644
+
 Test modulo storage/comparison of absurd dates:
 
 #if no-aix