diff --git a/lib/github-file.coffee b/lib/github-file.coffee index 116a897..20bf9d1 100644 --- a/lib/github-file.coffee +++ b/lib/github-file.coffee @@ -79,8 +79,8 @@ class GitHubFile openRepository: -> @isOpenable().then (isOpenable) => if isOpenable - @gitHubRepoUrl().then (gitHubRepoUrl) => - @openUrlInBrowser(gitHubRepoUrl) + @treeUrl().then (treeUrl) => + @openUrlInBrowser(treeUrl) else @reportValidationErrors() @@ -170,6 +170,14 @@ class GitHubFile .then ([gitHubRepoUrl, branchName]) => "#{gitHubRepoUrl}/compare/#{@encodeSegments(branchName)}" + treeUrl: -> + Promise.all([@gitHubRepoUrl(), @remoteBranchName()]) + .then ([gitHubRepoUrl, remoteBranchName]) -> + if remoteBranchName isnt 'master' + "#{gitHubRepoUrl}/tree/#{remoteBranchName}" + else + gitHubRepoUrl + encodeSegments: (segments='') -> segments = segments.split('/') segments = segments.map (segment) -> encodeURIComponent(segment) diff --git a/spec/fixtures/some-branch.git/HEAD b/spec/fixtures/some-branch.git/HEAD new file mode 100644 index 0000000..37c771a --- /dev/null +++ b/spec/fixtures/some-branch.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/some-branch diff --git a/spec/fixtures/some-branch.git/config b/spec/fixtures/some-branch.git/config new file mode 100644 index 0000000..0ce88ff --- /dev/null +++ b/spec/fixtures/some-branch.git/config @@ -0,0 +1,13 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true + ignorecase = true + precomposeunicode = false +[remote "origin"] + url = https://github.com/some-user/some-repo.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "some-branch"] + remote = origin + merge = refs/heads/some-branch diff --git a/spec/fixtures/some-branch.git/index b/spec/fixtures/some-branch.git/index new file mode 100644 index 0000000..ac609f4 Binary files /dev/null and b/spec/fixtures/some-branch.git/index differ diff --git a/spec/fixtures/some-branch.git/objects/5c/dc5a2508dfc832223df221a8e55fb6ccf95932 b/spec/fixtures/some-branch.git/objects/5c/dc5a2508dfc832223df221a8e55fb6ccf95932 new file mode 100644 index 0000000..1a76bd5 Binary files /dev/null and b/spec/fixtures/some-branch.git/objects/5c/dc5a2508dfc832223df221a8e55fb6ccf95932 differ diff --git a/spec/fixtures/some-branch.git/objects/80/b7897ceb6bd7531708509b50afeab36a4b73fd b/spec/fixtures/some-branch.git/objects/80/b7897ceb6bd7531708509b50afeab36a4b73fd new file mode 100644 index 0000000..1d0efa7 --- /dev/null +++ b/spec/fixtures/some-branch.git/objects/80/b7897ceb6bd7531708509b50afeab36a4b73fd @@ -0,0 +1 @@ +xA0@Q=\@S 1nu ʴ5@ ܾ\4dG6$MH( -sr *J XCgOO\ 4\g\KpgզX u?R_@ \ No newline at end of file diff --git a/spec/fixtures/some-branch.git/objects/98/4f6dfa5e1ac016cb4e4d11f39343efb3c27d7f b/spec/fixtures/some-branch.git/objects/98/4f6dfa5e1ac016cb4e4d11f39343efb3c27d7f new file mode 100644 index 0000000..f9c9b28 Binary files /dev/null and b/spec/fixtures/some-branch.git/objects/98/4f6dfa5e1ac016cb4e4d11f39343efb3c27d7f differ diff --git a/spec/fixtures/some-branch.git/objects/bf/b04df9a5bf7ad257575599558b54b3fc335f24 b/spec/fixtures/some-branch.git/objects/bf/b04df9a5bf7ad257575599558b54b3fc335f24 new file mode 100644 index 0000000..53983f2 Binary files /dev/null and b/spec/fixtures/some-branch.git/objects/bf/b04df9a5bf7ad257575599558b54b3fc335f24 differ diff --git a/spec/fixtures/some-branch.git/refs/heads/some-branch b/spec/fixtures/some-branch.git/refs/heads/some-branch new file mode 100644 index 0000000..5358190 --- /dev/null +++ b/spec/fixtures/some-branch.git/refs/heads/some-branch @@ -0,0 +1 @@ +80b7897ceb6bd7531708509b50afeab36a4b73fd diff --git a/spec/github-file-spec.coffee b/spec/github-file-spec.coffee index 76cfa53..f044b42 100644 --- a/spec/github-file-spec.coffee +++ b/spec/github-file-spec.coffee @@ -375,6 +375,38 @@ describe "GitHubFile", -> runs -> expect(githubFile.openUrlInBrowser).toHaveBeenCalledWith \ 'https://github.com/some-user/some-repo' + describe "when the branch is not master", -> + fixtureName = 'some-branch' + + beforeEach -> + setupWorkingDir(fixtureName) + setupGithubFile() + + afterEach -> + teardownWorkingDirAndRestoreFixture(fixtureName) + + it "opens the GitHub.com tree URL for the branch", -> + spyOn(githubFile, 'openUrlInBrowser') + waitsForPromise -> githubFile.openRepository() + runs -> expect(githubFile.openUrlInBrowser).toHaveBeenCalledWith \ + 'https://github.com/some-user/some-repo/tree/some-branch' + + describe "when the local branch is not tracked", -> + fixtureName = 'non-tracked-branch' + + beforeEach -> + setupWorkingDir(fixtureName) + setupGithubFile() + + afterEach -> + teardownWorkingDirAndRestoreFixture(fixtureName) + + it "opens the GitHub.com reposiotry URL", -> + spyOn(githubFile, 'openUrlInBrowser') + waitsForPromise -> githubFile.openRepository() + runs -> expect(githubFile.openUrlInBrowser).toHaveBeenCalledWith \ + 'https://github.com/some-user/some-repo' + describe "openIssues", -> describe 'when the file is openable on GitHub.com', -> fixtureName = 'github-remote'