diff --git a/src/app-helpers.js b/src/app-helpers.js
index 8531de8..9cebad2 100644
--- a/src/app-helpers.js
+++ b/src/app-helpers.js
@@ -127,8 +127,8 @@ export function useLanguageLoader(path) {
}, [path]);
}
-export function useCommitsFetcher({ repo, sha, path }) {
- return useLoader(async () => getCommits(repo, sha, path), [repo, sha, path]);
+export function useCommitsFetcher({ repo, path }) {
+ return useLoader(async () => getCommits(repo, path), [repo, path]);
}
export function useDocumentTitle(title) {
@@ -138,20 +138,15 @@ export function useDocumentTitle(title) {
}
export function getUrlParams() {
- const [
- ,
- owner,
- reponame,
- action,
- sha,
- ...paths
- ] = window.location.pathname.split("/");
+ const [, owner, reponame, action, ...paths] = window.location.pathname.split(
+ "/"
+ );
if (action !== "commits" && action !== "blob") {
return [];
}
- return [owner + "/" + reponame, sha, "/" + paths.join("/")];
+ return [owner + "/" + reponame, "/" + paths.join("/")];
}
function login() {
diff --git a/src/app.js b/src/app.js
index 3407bf9..78d6984 100644
--- a/src/app.js
+++ b/src/app.js
@@ -17,12 +17,12 @@ export default function App() {
return ;
}
- const [repo, sha, path] = getUrlParams();
+ const [repo, path] = getUrlParams();
if (!repo) {
return ;
} else {
- return ;
+ return ;
}
}
diff --git a/src/github.js b/src/github.js
index ba4f486..2353064 100644
--- a/src/github.js
+++ b/src/github.js
@@ -25,9 +25,37 @@ async function getContent(repo, sha, path) {
return { content, url: contentJson.html_url };
}
-export async function getCommits(repo, sha, path, top = 10) {
+async function splitBranchAndFilePath(repo, path) {
+ const branchesResponse = await fetch(
+ `https://api.github.com/repos/${repo}/branches`,
+ { headers: getHeaders() }
+ );
+
+ const branchesJson = await branchesResponse.json();
+ const branchNames = branchesJson
+ .map(branch => branch.name)
+ .sort(function(a, b) {
+ // Sort by length so that the longest string is always tried first.
+ // That way we won't remove any substrings by accident.
+ return b.length - a.length;
+ });
+
+ let branchName = "master";
+ let filePath = path;
+ branchNames.forEach(branch => {
+ if (path.startsWith("/" + branch)) {
+ branchName = branch;
+ filePath = path.replace("/" + branch + "/", "");
+ }
+ });
+ return { branchName, filePath };
+}
+
+export async function getCommits(repo, path, top = 10) {
+ const { branchName, filePath } = await splitBranchAndFilePath(repo, path);
+
const commitsResponse = await fetch(
- `https://api.github.com/repos/${repo}/commits?sha=${sha}&path=${path}`,
+ `https://api.github.com/repos/${repo}/commits?sha=${branchName}&path=${filePath}`,
{ headers: getHeaders() }
);
if (!commitsResponse.ok) {
@@ -55,7 +83,7 @@ export async function getCommits(repo, sha, path, top = 10) {
await Promise.all(
commits.map(async commit => {
- const info = await getContent(repo, commit.sha, path);
+ const info = await getContent(repo, commit.sha, filePath);
commit.content = info.content;
commit.fileUrl = info.url;
})