1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-28 07:45:00 +00:00

vc-git--program-version to support Git for macOS version string

`git version` on macOS returns e.g., "git version 2.30.1 (Apple
Git-130)" and `vc-git--program-version` currently returns "0" instead
of "2.30.1".

* lisp/vc/vc-git.el (vc-git--program-version): Ignore text after
the version number when parsing git versions (bug#52172).

Copyright-paperwork-exempt: yes
This commit is contained in:
Justin Schell 2021-12-06 02:27:52 +01:00 committed by Lars Ingebrigtsen
parent 2454f9876d
commit e6a0cfaad5
2 changed files with 75 additions and 6 deletions

View File

@ -298,12 +298,14 @@ included in the completions."
(vc-git--run-command-string nil "version")))
(setq vc-git--program-version
(if (and version-string
;; Git for Windows appends ".windows.N" to the
;; numerical version reported by Git.
(string-match
"git version \\([0-9.]+\\)\\(\\.windows\\.[0-9]+\\)?$"
;; Some Git versions append additional strings
;; to the numerical version string. E.g., Git
;; for Windows appends ".windows.N", while Git
;; for Mac appends " (Apple Git-N)". Capture
;; numerical version and ignore the rest.
(string-match "git version \\([0-9][0-9.]+\\)"
version-string))
(match-string 1 version-string)
(string-trim-right (match-string 1 version-string) "\\.")
"0")))))
(defun vc-git--git-status-to-vc-state (code-list)

View File

@ -0,0 +1,67 @@
;;; vc-git-tests.el --- tests for vc/vc-git.el -*- lexical-binding:t -*-
;; Copyright (C) 2016-2021 Free Software Foundation, Inc.
;; Author: Justin Schell <justinmschell@gmail.com>
;; Maintainer: emacs-devel@gnu.org
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;; Code:
(require 'vc-git)
(ert-deftest vc-git-test-program-version-general ()
(vc-git-test--run-program-version-test
"git version 2.30.1.0"
"2.30.1.0"))
(ert-deftest vc-git-test-program-version-windows ()
(vc-git-test--run-program-version-test
"git version 2.30.1.1.windows.1"
"2.30.1.1"))
(ert-deftest vc-git-test-program-version-apple ()
(vc-git-test--run-program-version-test
"git version 2.30.1.2 (Apple Git-130)"
"2.30.1.2"))
(ert-deftest vc-git-test-program-version-other ()
(vc-git-test--run-program-version-test
"git version 2.30.1.3.foo.bar"
"2.30.1.3"))
(ert-deftest vc-git-test-program-version-invalid-leading-string ()
(vc-git-test--run-program-version-test
"git version foo.bar.2.30.1.4"
"0"))
(ert-deftest vc-git-test-program-version-invalid-leading-dot ()
(vc-git-test--run-program-version-test
"git version .2.30.1.5"
"0"))
(defun vc-git-test--run-program-version-test
(mock-version-string expected-output)
(cl-letf* (((symbol-function 'vc-git--run-command-string)
(lambda (_file _args) mock-version-string))
(vc-git--program-version nil)
(actual-output (vc-git--program-version)))
(should (equal actual-output expected-output))))
;;; vc-git-tests.el ends here