Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs

This commit is contained in:
Vincent Belaïche 2016-06-02 20:58:40 +02:00
commit 5484fc1d42
4 changed files with 39 additions and 62 deletions

View file

@ -1327,7 +1327,8 @@ If it is @code{t}, the conversion uses Universal Time. If it is
a string, the conversion uses the time zone rule equivalent to setting
@env{TZ} to that string. If it is an integer @var{offset}, the
conversion uses a fixed time zone with the given offset and a numeric
abbreviation. If it is a list (@var{offset} @var{abbr}), where
abbreviation on POSIX-compatible platforms and an unspecified abbreviation
on MS-Windows. If it is a list (@var{offset} @var{abbr}), where
@var{offset} is an integer number of seconds east of Universal Time
and @var{abbr} is a string, the conversion uses a fixed time zone with
the given offset and abbreviation.

View file

@ -78,10 +78,6 @@
(expand-file-name "textmodes" dir)
(expand-file-name "vc" dir)))))
;; Prevent build-time PATH getting stored in the binary.
;; Mainly cosmetic, but helpful for Guix. (Bug#20330)
(setq exec-path nil)
(if (eq t purify-flag)
;; Hash consing saved around 11% of pure space in my tests.
(setq purify-flag (make-hash-table :test 'equal :size 80000)))
@ -431,6 +427,12 @@ lost after dumping")))
(message "Pure-hashed: %d strings, %d vectors, %d conses, %d bytecodes, %d others"
strings vectors conses bytecodes others)))
;; Prevent build-time PATH getting stored in the binary.
;; Mainly cosmetic, but helpful for Guix. (Bug#20330)
;; Do this here, rather than earlier, so that the above code
;; can invoke Git commands and the like.
(setq exec-path nil)
;; Avoid error if user loads some more libraries now and make sure the
;; hash-consing hash table is GC'd.
(setq purify-flag nil)

View file

@ -116,18 +116,6 @@ or if we could not determine the revision.")
(looking-at "[0-9a-fA-F]\\{40\\}"))
(match-string 0)))))
(defun emacs-repository--version-git-1 (file dir)
"Internal subroutine of `emacs-repository-get-version'."
(when (file-readable-p file)
(with-temp-buffer
(insert-file-contents file)
(cond ((looking-at "[0-9a-fA-F]\\{40\\}")
(match-string 0))
((looking-at "ref: \\(.*\\)")
(emacs-repository--version-git-1
(expand-file-name (match-string 1) dir)
dir))))))
(defun emacs-repository-get-version (&optional dir external)
"Try to return as a string the repository revision of the Emacs sources.
The format of the returned string is dependent on the VCS in use.
@ -137,51 +125,8 @@ this reports on the current state of the sources, which may not
correspond to the running Emacs.
Optional argument DIR is a directory to use instead of `source-directory'.
Optional argument EXTERNAL non-nil means to just ask the VCS itself,
if the sources appear to be under version control. Otherwise only ask
the VCS if we cannot find any information ourselves."
(or dir (setq dir source-directory))
(let* ((base-dir (expand-file-name ".git" dir))
(in-main-worktree (file-directory-p base-dir))
(in-linked-worktree nil)
sub-dir)
;; If the sources are in a linked worktree, .git is a file that points to
;; the location of the main worktree and the repo's administrative files.
(when (and (not in-main-worktree)
(file-regular-p base-dir)
(file-readable-p base-dir))
(with-temp-buffer
(insert-file-contents base-dir)
(when (looking-at "gitdir: \\(.*\.git\\)\\(.*\\)$")
(setq base-dir (match-string 1)
sub-dir (concat base-dir (match-string 2))
in-linked-worktree t))))
;; We've found a worktree, either main or linked.
(when (or in-main-worktree in-linked-worktree)
(if external
(emacs-repository-version-git dir)
(or (if in-linked-worktree
(emacs-repository--version-git-1
(expand-file-name "HEAD" sub-dir) base-dir)
(or
(let ((packed-refs (expand-file-name "packed-refs" base-dir)))
(if (file-readable-p packed-refs)
(with-temp-buffer
(insert-file-contents packed-refs)
(when (re-search-forward
"^\\([0-9a-fA-F]\\{40\\}\\) refs/heads/master$"
nil t)
(match-string 1)))))
(let ((files '("HEAD" "refs/heads/master"))
file rev)
(while (and (not rev)
(setq file (car files)))
(setq file (expand-file-name file base-dir)
files (cdr files)
rev (emacs-repository--version-git-1 file base-dir)))
rev)))
;; AFAICS this doesn't work during dumping (bug#20799).
(emacs-repository-version-git dir))))))
Optional argument EXTERNAL is ignored."
(emacs-repository-version-git (or dir source-directory)))
;; We put version info into the executable in the form that `ident' uses.
(purecopy (concat "\n$Id: " (subst-char-in-string ?\n ?\s (emacs-version))

View file

@ -2505,6 +2505,35 @@ sys_putenv (char *str)
return unsetenv (str);
}
if (strncmp (str, "TZ=<", 4) == 0)
{
/* MS-Windows does not support POSIX.1-2001 angle-bracket TZ
abbreviation syntax. Convert to POSIX.1-1988 syntax if possible,
and to the undocumented placeholder "ZZZ" otherwise. */
bool supported_abbr = true;
for (char *p = str + 4; *p; p++)
{
if (('0' <= *p && *p <= '9') || *p == '-' || *p == '+')
supported_abbr = false;
else if (*p == '>')
{
ptrdiff_t abbrlen;
if (supported_abbr)
{
abbrlen = p - (str + 4);
memmove (str + 3, str + 4, abbrlen);
}
else
{
abbrlen = 3;
memset (str + 3, 'Z', abbrlen);
}
memmove (str + 3 + abbrlen, p + 1, strlen (p));
break;
}
}
}
return _putenv (str);
}