From f9f2092246d26362aae06e7e534db906d4c1ca4f Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 11 Jul 2014 10:45:11 -0700 Subject: [PATCH] Use `git diff a b` for ranges, not `git diff a..b` Summary: These are documented as being identical, but `git diff a b` works if `a` is a tree (for example, `4b825d...`, the empty tree hash), but `git diff a..b` does not. Particularly, with the `a..b` form, `arc diff --base arc:empty` does not work. With the `a b` form, it does. Test Plan: Ran `arc diff --base arc:empty` in a repository and got a diff. Reviewers: btrahan, talshiri Reviewed By: talshiri Subscribers: epriestley Differential Revision: https://secure.phabricator.com/D9898 --- src/repository/api/ArcanistGitAPI.php | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/repository/api/ArcanistGitAPI.php b/src/repository/api/ArcanistGitAPI.php index e9f05f58..514f6068 100644 --- a/src/repository/api/ArcanistGitAPI.php +++ b/src/repository/api/ArcanistGitAPI.php @@ -429,17 +429,20 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI { * @param head revision. If this is null, the generated diff will include the * working copy */ - public function getFullGitDiff($base, $head=null) { + public function getFullGitDiff($base, $head = null) { $options = $this->getDiffFullOptions(); - $diff_revision = $base; - if ($head) { - $diff_revision .= '..'.$head; + if ($head !== null) { + list($stdout) = $this->execxLocal( + "diff {$options} %s %s --", + $base, + $head); + } else { + list($stdout) = $this->execxLocal( + "diff {$options} %s --", + $base); } - list($stdout) = $this->execxLocal( - "diff {$options} %s --", - $diff_revision); return $stdout; }