Add ahead/behind indicator and push/pull buttons

This commit is contained in:
2026-02-27 19:22:03 +01:00
parent a27c9fba00
commit 52fe455c76
4 changed files with 38 additions and 4 deletions

View File

@@ -16,4 +16,6 @@ public class WebgitProperties
private Path worktreePath;
private Path gitDirPath;
private Integer telnetPort;
private String username;
private String password;
}

View File

@@ -57,6 +57,12 @@ public class RepoController
model.addAttribute("branch", gitService.getCurrentBranch(name));
model.addAttribute("modifiedFiles", gitService.getModifiedFiles(name));
model.addAttribute("stagedFiles", gitService.getStagedFiles(name));
int[] aheadBehind = gitService.getAheadBehind(name);
if (aheadBehind != null)
{
model.addAttribute("commitsAhead", aheadBehind[0]);
model.addAttribute("commitsBehind", aheadBehind[1]);
}
return "changes";
}
@@ -224,17 +230,19 @@ public class RepoController
}
@PostMapping("/repo/{name}/push")
public String push(@PathVariable String name) throws IOException, GitAPIException
public String push(@PathVariable String name,
@RequestParam(required = false, defaultValue = "remote") String redirectTo) throws IOException, GitAPIException
{
gitService.push(name);
return "redirect:/repo/" + name + "/remote";
return "redirect:/repo/" + name + "/" + redirectTo;
}
@PostMapping("/repo/{name}/pull")
public String pull(@PathVariable String name) throws IOException, GitAPIException
public String pull(@PathVariable String name,
@RequestParam(required = false, defaultValue = "remote") String redirectTo) throws IOException, GitAPIException
{
gitService.pull(name);
return "redirect:/repo/" + name + "/remote";
return "redirect:/repo/" + name + "/" + redirectTo;
}
@PostMapping("/repo/{name}/update-remote")

View File

@@ -598,6 +598,19 @@ public class GitService
}
}
public int[] getAheadBehind(String name) throws IOException
{
try (Git git = openRepository(name))
{
String branch = git.getRepository().getBranch();
org.eclipse.jgit.lib.BranchTrackingStatus status =
org.eclipse.jgit.lib.BranchTrackingStatus.of(git.getRepository(), branch);
if (status == null)
return null;
return new int[]{status.getAheadCount(), status.getBehindCount()};
}
}
public void push(String name) throws IOException, GitAPIException
{
try (Git git = openRepository(name))

View File

@@ -6,6 +6,17 @@
<body>
<h2>Staging</h2>
<p>Branch: <b th:text="${branch}"></b></p>
<p th:if="${commitsAhead != null}">
<span th:text="${commitsAhead}"></span> ahead, <span th:text="${commitsBehind}"></span> behind
<form method="post" th:action="@{/repo/{name}/push(name=${name})}">
<input type="hidden" name="redirectTo" value="changes">
<input type="submit" value="Push">
</form>
<form method="post" th:action="@{/repo/{name}/pull(name=${name})}">
<input type="hidden" name="redirectTo" value="changes">
<input type="submit" value="Pull">
</form>
</p>
<h3>Modified Files (unstaged)</h3>
<form method="post" th:action="@{/repo/{name}/stage(name=${name})}" th:if="${!#lists.isEmpty(modifiedFiles)}">