From 11c004e89dfacc381fdb10b0db70475f693c27f1 Mon Sep 17 00:00:00 2001 From: tkalmar <971164+tkalmar@users.noreply.github.com> Date: Sat, 9 Oct 2021 20:45:16 +0200 Subject: [PATCH] fix: remove dangling chars from git dir (#1028) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #1027 by removing dangling chars * Add tests Co-authored-by: Thomas Kalmár --- lib/resolveGitRepo.js | 8 ++++++++ test/resolveGitRepo.spec.js | 25 ++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/resolveGitRepo.js b/lib/resolveGitRepo.js index 03d04ed55..79dfff61d 100644 --- a/lib/resolveGitRepo.js +++ b/lib/resolveGitRepo.js @@ -26,6 +26,11 @@ const resolveGitConfigDir = async (gitDir) => { } const determineGitDir = (cwd, relativeDir) => { + // if relative dir and cwd have different endings normalize it + // this happens under windows, where normalize is unable to normalize git's output + if (relativeDir && relativeDir.endsWith(path.sep)) { + relativeDir = relativeDir.slice(0, -1) + } if (relativeDir) { // the current working dir is inside the git top-level directory return normalize(cwd.substring(0, cwd.lastIndexOf(relativeDir))) @@ -65,3 +70,6 @@ const resolveGitRepo = async (cwd = process.cwd()) => { } module.exports = resolveGitRepo + +// exported for test +module.exports.determineGitDir = determineGitDir diff --git a/test/resolveGitRepo.spec.js b/test/resolveGitRepo.spec.js index 46086ab41..e36e44559 100644 --- a/test/resolveGitRepo.spec.js +++ b/test/resolveGitRepo.spec.js @@ -1,7 +1,7 @@ import normalize from 'normalize-path' import path from 'path' -import resolveGitRepo from '../lib/resolveGitRepo' +import resolveGitRepo, { determineGitDir } from '../lib/resolveGitRepo' /** * resolveGitRepo runs execa, so the mock needs to be disabled for these tests @@ -48,4 +48,27 @@ describe('resolveGitRepo', () => { const { gitDir } = await resolveGitRepo({ cwd: '/' }) // assume root is not a git directory expect(gitDir).toEqual(null) }) + + describe('determineGitDir', () => { + it('should resolve to current working dir when relative dir is empty', () => { + const cwd = process.cwd() + const relativeDir = undefined + const rootDir = determineGitDir(cwd, relativeDir) + expect(rootDir).toEqual(normalize(cwd)) + }) + + it('should resolve to parent dir when relative dir is child', () => { + const relativeDir = 'bar' + const cwd = process.cwd() + path.sep + 'bar' + const rootDir = determineGitDir(cwd, relativeDir) + expect(rootDir).toEqual(normalize(process.cwd())) + }) + + it('should resolve to parent dir when relative dir is child and child has trailing dir separator', () => { + const relativeDir = 'bar' + path.sep + const cwd = process.cwd() + path.sep + 'bar' + const rootDir = determineGitDir(cwd, relativeDir) + expect(rootDir).toEqual(normalize(process.cwd())) + }) + }) })