diff options
| author | Gabriel Schneider <[email protected]> | 2026-08-02 12:36:54 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-08-02 17:37:58 -0300 |
| commit | e16f78b255bcf46d8c6f9a4b9e76dd7a3817edeb (patch) | |
| tree | de0db0c369522b5bf92ff32a8351de2224c5c9dc /vrsite/jj.go | |
| parent | 151ea12251ed876aa87bb486da1bc337e25369e9 (diff) | |
| download | notevi-e16f78b255bcf46d8c6f9a4b9e76dd7a3817edeb.tar.gz notevi-e16f78b255bcf46d8c6f9a4b9e76dd7a3817edeb.zip | |
Diffstat (limited to 'vrsite/jj.go')
| -rw-r--r-- | vrsite/jj.go | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/vrsite/jj.go b/vrsite/jj.go index bb95d83..0b5cbdf 100644 --- a/vrsite/jj.go +++ b/vrsite/jj.go @@ -1,9 +1,8 @@ // jj.go — every read of the repository goes through here. // -// Two rules hold everywhere: the repo is never modified (no edit, no new, no -// checkout; --ignore-working-copy on every call so we never even snapshot), -// and nothing is written to disk — templates are passed inline with -T, so a -// query leaves no trace behind, it just renders once and is sent to the page. +// These helpers never modify project history or its working copy +// (--ignore-working-copy means they never even snapshot it). Sidecar mutation +// is isolated in the shared sidecar package. package main import ( @@ -72,21 +71,27 @@ func checkRevset(r string) error { } func resolveChange(repo, rev string) (string, error) { + change, _, err := resolveRevision(repo, rev) + return change, err +} + +func resolveRevision(repo, rev string) (change, commit string, err error) { if rev == "" { rev = "@" } if err := checkRevset(rev); err != nil { - return "", err + return "", "", err } - out, err := jjRun(repo, "log", "-r", rev, "--no-graph", "-n", "1", "-T", "change_id") + out, err := jjRun(repo, "log", "-r", "exactly(("+rev+"), 1)", "--no-graph", + "-T", "change_id ++ \"\\n\" ++ commit_id ++ \"\\n\"") if err != nil { - return "", err + return "", "", err } - id := strings.TrimSpace(string(out)) - if id == "" { - return "", fmt.Errorf("revset %q matches no change", rev) + ids := strings.Fields(string(out)) + if len(ids) != 2 { + return "", "", fmt.Errorf("revset %q did not resolve to one change and commit", rev) } - return id, nil + return ids[0], ids[1], nil } // changeBrief resolves a revset to the one change it names, with everything a |
