diff --git a/hgext/keyword.py b/hgext/keyword.py --- a/hgext/keyword.py +++ b/hgext/keyword.py @@ -270,7 +270,10 @@ class kwtemplater(object): data, found = _shrinktext(data, re_kw.subn) if found: self.ui.note(msg % f) + fpath = self.repo.wjoin(f) + mode = os.lstat(fpath).st_mode self.repo.wwrite(f, data, ctx.flags(f)) + os.chmod(fpath, mode) if kwcmd: self.repo.dirstate.normal(f) elif self.record: diff --git a/tests/test-keyword.t b/tests/test-keyword.t --- a/tests/test-keyword.t +++ b/tests/test-keyword.t @@ -270,15 +270,20 @@ Update and expand xxx $ ignore $Id$ -Check whether expansion is filewise +Check whether expansion is filewise and file mode is preserved $ echo '$Id$' > c $ echo 'tests for different changenodes' >> c + $ chmod 600 c + $ ls -l c | cut -b 1-10 + -rw------- commit file c $ hg commit -A -mcndiff -d '1 0' -u 'User Name ' adding c + $ ls -l c | cut -b 1-10 + -rw------- force expansion