roundabout,
created on Friday, 22 December 2023, 18:58:25 (1703271505),
received on Wednesday, 31 July 2024, 06:54:40 (1722408880)
Author identity: vlad <vlad.muntoiu@gmail.com>
092dd25d4861e34d6881a2a0e3e7b518b06fb864
app.py
@@ -979,8 +979,9 @@ def repositoryBranches(username, repository):
)
@repositories.route("/<username>/<repository>/log/")
def repositoryLog(username, repository):
@repositories.route("/<username>/<repository>/log/", defaults={"branch": None})
@repositories.route("/<username>/<repository>/log/<branch>/")
def repositoryLog(username, repository, branch):
if not (getVisibility(username, repository) or getPermissionLevel(flask.session.get("username"), username,
repository) is not None):
flask.abort(403)
@@ -995,12 +996,48 @@ def repositoryLog(username, repository):
repo = git.Repo(serverRepoLocation)
repoData = Repo.query.filter_by(route=f"/{username}/{repository}").first()
commits = Commit.query.filter_by(repo=repoData)
if not repoData.defaultBranch:
if repo.heads:
repoData.defaultBranch = repo.heads[0].name
else:
return flask.render_template("empty.html",
remote=f"http{'s' if config.suggestHTTPS else ''}://{config.BASE_DOMAIN}/git/{username}/{repository}"), 200
if not branch:
branch = repoData.defaultBranch
return flask.redirect(f"./{branch}", code=302)
if branch.startswith("tag:"):
ref = f"tags/{branch[4:]}"
elif branch.startswith("~"):
ref = branch[1:]
else:
ref = f"heads/{branch}"
ref = ref.replace("~", "/") # encode slashes for URL support
try:
repo.git.checkout("-f", ref)
except git.exc.GitCommandError:
return flask.render_template("not-found.html"), 404
branches = repo.heads
allRefs = []
for ref in repo.heads:
allRefs.append((ref, "head"))
for ref in repo.tags:
allRefs.append((ref, "tag"))
commitList = [f"/{username}/{repository}/{sha}" for sha in gitCommand(serverRepoLocation, None, "log", "--format='%H'").decode().split("\n")]
commits = Commit.query.filter(Commit.identifier.in_(commitList))
return flask.render_template(
"repo-log.html",
username=username,
repository=repository,
branches=allRefs,
current=branch,
repoData=repoData,
repo=repo,
commits=commits,
templates/repository/repo-log.html
@@ -6,6 +6,43 @@
<x-vbox>
<x-frame style="--width: 896px;" class="flexible-space">
<x-vbox>
<select id="branch-selection" style="flex: 0 1 auto;">
<option value="ref-{{ current }}" selected>{% if "tag:" in current %}tag:{% endif %}{{ current | replace("~", "/") | replace("tag:", " ") }}</option>
{% for branch in branches %}
{% if branch[0] != current | replace("~", "/") | replace("tag:", " ") %}
<option value="ref-{% if branch[1] == 'tag' %}tag:{% endif %}{{ branch[0] | replace('/', '~') }}">{% if branch[1] == "tag" %}tag: {% endif %}{{ branch[0] }}</option>
{% endif %}
{% endfor %}
<!--<option value="new">[CREATE NEW BRANCH]</option>-->
</select>
<script>
branchSelect = document.getElementById("branch-selection");
branchSelect.addEventListener("change", function() {
if(branchSelect.value == "new") {
document.getElementById("new-branch").showModal();
} else {
const PREFIX = "ref-";
if(branchSelect.value.startsWith(PREFIX)) {
branch = branchSelect.value.slice(PREFIX.length);
}
var http = new XMLHttpRequest();
http.open("HEAD", "/{{ username }}/{{ repository }}/log/" + branch + "/{{ subpath }}", false);
http.send();
if(http.status == 404) {
location.href = "/{{ username }}/{{ repository }}/log/" + branch;
} else {
location.href = "/{{ username }}/{{ repository }}/log/" + branch + "/{{ subpath }}";
}
}
});
path = document.getElementById("repo-path-bar");
path.addEventListener("change", function() {
location.href = "/{{ username }}/{{ repository }}/log/{{ current }}" + path.value;
});
</script>
{% for commit in commits | reverse %}
<article class="card card-horizontal">
<figure class="branch-icon">