Commit Briefs

2f8438b006 Stefan Sperling

avoid 'remove unused' loop by storing excluded objects in a separate set

ok op@


f5e78e05ae Stefan Sperling

avoid loop over the ID set which removes objects IDs with reused deltas

ok op@


2d9e6abf24 Stefan Sperling

store deltas in compressed form while packing, both in memory and cache file

This reduces memory and disk space consumption during packing. with tweaks + memleak on error fix from op@ ok op@


6b7665acf3 Omar Polo

s/empty/done forgot in previous commit



f90b7a8ce9 Omar Polo

trailing whitespaces


4379a9aae9 Omar Polo

got patch: handle git-style rename diffs

extend the support for git-style diffs to include the "pure rename" case, i.e. when a file is renamed without any edits. ok stsp@


611e8e319e Stefan Sperling

avoid subtraction of values larger than int in qsort(3) comparison callbacks

tweak + ok tb@


a8acad7d8e Stefan Sperling

bump version number


45b17929f6 Stefan Sperling

CHANGES for 0.69 (tags/0.69)


45ca46332f Christian Weisgerber

add -q to "gotadmin pack" usage


bad961bf76 Omar Polo

got patch: allow to reverse a patch

add a flag to got_patch to reverse a patch before applying and the -R flag for `got patch'. ok stsp@


b28327780d Omar Polo

got-read-patch: preserve all \ lines

as a cheap optimization got-read-patch was sending only the "\ No newline at end of file" lines that follows an addition (a "+" line). To be able to reverse patches in the future got_patch needs to know about all of these lines instead. No functional changes intended. ok stsp@


15e1bda6b8 Omar Polo

test `got patch' vs path-prefixes, relative paths and strip

reminded by and 'looks fine' to stsp@


f1d6cebb43 Omar Polo

typos


8618727816 Omar Polo

mention -p in usage_patch


ed3bff8307 Omar Polo

got patch: resolve paths from the current working directory

this allow to apply patches from subdirectories of the work tree root. Prodded by naddy@, ok stsp@.


a05fb46091 Omar Polo

don't pass relative paths to get_file_status


41a37a4414 Omar Polo

fix wrong path in error message


d7b5a0e827 Stefan Sperling

inline struct got_object_id in struct got_object_qid

Saves us from doing a malloc/free call for every item on the list. ok op@


cbc287dcbb Stefan Sperling

reimplement object-ID set data structure on top of a hash table

Siphash suggested by jrick as a better alternative to murmurhash for this use case. with small fixes from and ok op@


3313bcd840 Omar Polo

delete trailing whitespaces




70f8f24dc5 Stefan Sperling

speed up initial stage of packing by adding a "skip" commit color

The skip color marks boundary commits and their ancestors. Boundary commits are reachable both via references which we want to exclude from the pack, and via references which we want to include in the pack. We continue processing commit history up to the point we are left with only skip commits on the queue. This can speed up findtwixt() significantly and avoids wrong results produced by the old algorithm which made no distinction between "drop" and "skip". This idea was first implemented by Michael Forney for git9: https://git.9front.org/plan9front/plan9front/2e47badb88312c5c045a8042dc2ef80148e5ab47/commit.html Michael's log message for git9 is reproduced below: git/query: refactor graph painting algorithm (findtwixt, lca) We now keep track of 3 sets during traversal: - keep: commits we've reached from head commits - drop: commits we've reached from tail commits - skip: ancestors of commits in both 'keep' and 'drop' Commits in 'keep' and/or 'drop' may be added later to the 'skip' set if we discover later that they are part of a common subgraph of the head and tail commits. From these sets we can calculate the commits we are interested in: lca commits are those in 'keep' and 'drop', but not in 'skip'. findtwixt commits are those in 'keep', but not in 'drop' or 'skip'. The "LCA" commit returned is a common ancestor such that there are no other common ancestors that can reach that commit. Although there can be multiple commits that meet this criteria, where one is technically lower on the commit-graph than the other, these cases only happen in complex merge arrangements and any choice is likely a decent merge base. Repainting is now done in paint() directly. When we find a boundary commit, we switch our paint color to 'skip'. 'skip' painting does not stop when it hits another color; we continue until we are left with only 'skip' commits on the queue. This fixes several mishandled cases in the current algorithm: 1. If we hit the common subgraph from tail commits first (if the tail commit was newer than the head commit), we ended up traversing the entire commit graph. This is because we couldn't distinguish between 'drop' commits that were part of the common subgraph, and those that were still looking for it. 2. If we traversed through an initial part of the common subgraph from head commits before reaching it from tail commits, these commits were returned from findtwixt even though they were also reachable from tail commits. 3. In the same case as 2, we might end up choosing an incorrect commit as the LCA, which is an ancestor of the real LCA.