New port: devel/git-absorb: Git command for automating fixup/autosquash commits

You have a feature branch with a few commits. Your teammate reviewed the branch
and pointed out a few bugs. You have fixes for the bugs, but you don't want to
shove them all into an opaque commit that says fixes, because you believe in
atomic commits. Instead of manually finding commit SHAs for git commit --fixup,
or running a manual interactive rebase, do this:

> git add $FILES_YOU_FIXED
> git absorb
> git rebase -i --autosquash master

git absorb will automatically identify which commits are safe to modify, and
which indexed changes belong to each of those commits. It will then write
fixup! commits for each of those changes. You can check its output manually if
you don't trust it, and then fold the fixups into your feature branch with
git's built-in autosquash functionality.

PR:             235436
Submitted by:   Greg V <greg@unrelenting.technology>
This commit is contained in:
Tobias C. Berner 2019-02-09 09:20:26 +00:00
parent c61335e905
commit 9a8aed1bfd
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=492487
4 changed files with 228 additions and 0 deletions

View File

@ -771,6 +771,7 @@
SUBDIR += gindent
SUBDIR += gio-sharp
SUBDIR += git
SUBDIR += git-absorb
SUBDIR += git-bzr-ng
SUBDIR += git-cinnabar
SUBDIR += git-codereview

87
devel/git-absorb/Makefile Normal file
View File

@ -0,0 +1,87 @@
# $FreeBSD$
PORTNAME= git-absorb
DISTVERSION= 0.3.0
CATEGORIES= devel
MAINTAINER= greg@unrelenting.technology
COMMENT= Git command for automating fixup/autosquash commits
LICENSE= BSD3CLAUSE
LICENSE_FILE= ${WRKSRC}/LICENSE.md
USES= cargo
USE_GITHUB= yes
GH_ACCOUNT= tummychow
CARGO_CRATES= ansi_term-0.10.2 \
atty-0.2.6 \
backtrace-0.3.5 \
backtrace-sys-0.1.16 \
bitflags-1.0.1 \
cc-1.0.25 \
cfg-if-0.1.2 \
chrono-0.4.0 \
clap-2.30.0 \
failure-0.1.1 \
failure_derive-0.1.1 \
fuchsia-zircon-0.3.3 \
fuchsia-zircon-sys-0.3.3 \
git2-0.7.5 \
idna-0.1.4 \
isatty-0.1.6 \
kernel32-sys-0.2.2 \
lazy_static-1.0.0 \
libc-0.2.43 \
libgit2-sys-0.7.10 \
libz-sys-1.0.25 \
log-0.4.6 \
matches-0.1.6 \
memchr-2.0.1 \
num-0.1.42 \
num-integer-0.1.36 \
num-iter-0.1.35 \
num-traits-0.2.0 \
percent-encoding-1.0.1 \
pkg-config-0.3.9 \
quote-0.3.15 \
rand-0.4.2 \
redox_syscall-0.1.37 \
redox_termios-0.1.1 \
remove_dir_all-0.3.0 \
rustc-demangle-0.1.5 \
slog-2.1.1 \
slog-async-2.2.0 \
slog-term-2.3.0 \
strsim-0.7.0 \
syn-0.11.11 \
synom-0.11.3 \
synstructure-0.6.1 \
take_mut-0.2.0 \
tempdir-0.3.6 \
term-0.4.6 \
termion-1.5.1 \
textwrap-0.9.0 \
thread_local-0.3.5 \
time-0.1.39 \
unicode-bidi-0.3.4 \
unicode-normalization-0.1.5 \
unicode-width-0.1.4 \
unicode-xid-0.0.4 \
unreachable-1.0.0 \
url-1.6.0 \
vcpkg-0.2.2 \
vec_map-0.8.0 \
void-1.0.2 \
winapi-0.2.8 \
winapi-0.3.4 \
winapi-build-0.1.1 \
winapi-i686-pc-windows-gnu-0.4.0 \
winapi-x86_64-pc-windows-gnu-0.4.0
PLIST_FILES= bin/git-absorb
post-install:
${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/git-absorb
.include <bsd.port.mk>

131
devel/git-absorb/distinfo Normal file
View File

@ -0,0 +1,131 @@
TIMESTAMP = 1548801687
SHA256 (rust/crates/ansi_term-0.10.2.tar.gz) = 6b3568b48b7cefa6b8ce125f9bb4989e52fbcc29ebea88df04cc7c5f12f70455
SIZE (rust/crates/ansi_term-0.10.2.tar.gz) = 16642
SHA256 (rust/crates/atty-0.2.6.tar.gz) = 8352656fd42c30a0c3c89d26dea01e3b77c0ab2af18230835c15e2e13cd51859
SIZE (rust/crates/atty-0.2.6.tar.gz) = 5617
SHA256 (rust/crates/backtrace-0.3.5.tar.gz) = ebbbf59b1c43eefa8c3ede390fcc36820b4999f7914104015be25025e0d62af2
SIZE (rust/crates/backtrace-0.3.5.tar.gz) = 27636
SHA256 (rust/crates/backtrace-sys-0.1.16.tar.gz) = 44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661
SIZE (rust/crates/backtrace-sys-0.1.16.tar.gz) = 283418
SHA256 (rust/crates/bitflags-1.0.1.tar.gz) = b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf
SIZE (rust/crates/bitflags-1.0.1.tar.gz) = 13451
SHA256 (rust/crates/cc-1.0.25.tar.gz) = f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16
SIZE (rust/crates/cc-1.0.25.tar.gz) = 43191
SHA256 (rust/crates/cfg-if-0.1.2.tar.gz) = d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de
SIZE (rust/crates/cfg-if-0.1.2.tar.gz) = 6668
SHA256 (rust/crates/chrono-0.4.0.tar.gz) = 7c20ebe0b2b08b0aeddba49c609fe7957ba2e33449882cb186a180bc60682fa9
SIZE (rust/crates/chrono-0.4.0.tar.gz) = 118850
SHA256 (rust/crates/clap-2.30.0.tar.gz) = 1c07b9257a00f3fc93b7f3c417fc15607ec7a56823bc2c37ec744e266387de5b
SIZE (rust/crates/clap-2.30.0.tar.gz) = 190562
SHA256 (rust/crates/failure-0.1.1.tar.gz) = 934799b6c1de475a012a02dab0ace1ace43789ee4b99bcfbf1a2e3e8ced5de82
SIZE (rust/crates/failure-0.1.1.tar.gz) = 26782
SHA256 (rust/crates/failure_derive-0.1.1.tar.gz) = c7cdda555bb90c9bb67a3b670a0f42de8e73f5981524123ad8578aafec8ddb8b
SIZE (rust/crates/failure_derive-0.1.1.tar.gz) = 9312
SHA256 (rust/crates/fuchsia-zircon-0.3.3.tar.gz) = 2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82
SIZE (rust/crates/fuchsia-zircon-0.3.3.tar.gz) = 22565
SHA256 (rust/crates/fuchsia-zircon-sys-0.3.3.tar.gz) = 3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7
SIZE (rust/crates/fuchsia-zircon-sys-0.3.3.tar.gz) = 7191
SHA256 (rust/crates/git2-0.7.5.tar.gz) = 591f8be1674b421644b6c030969520bc3fa12114d2eb467471982ed3e9584e71
SIZE (rust/crates/git2-0.7.5.tar.gz) = 145895
SHA256 (rust/crates/idna-0.1.4.tar.gz) = 014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d
SIZE (rust/crates/idna-0.1.4.tar.gz) = 289112
SHA256 (rust/crates/isatty-0.1.6.tar.gz) = 8f2a233726c7bb76995cec749d59582e5664823b7245d4970354408f1d79a7a2
SIZE (rust/crates/isatty-0.1.6.tar.gz) = 7752
SHA256 (rust/crates/kernel32-sys-0.2.2.tar.gz) = 7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d
SIZE (rust/crates/kernel32-sys-0.2.2.tar.gz) = 24537
SHA256 (rust/crates/lazy_static-1.0.0.tar.gz) = c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d
SIZE (rust/crates/lazy_static-1.0.0.tar.gz) = 12611
SHA256 (rust/crates/libc-0.2.43.tar.gz) = 76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d
SIZE (rust/crates/libc-0.2.43.tar.gz) = 353810
SHA256 (rust/crates/libgit2-sys-0.7.10.tar.gz) = 4916b5addc78ec36cc309acfcdf0b9f9d97ab7b84083118b248709c5b7029356
SIZE (rust/crates/libgit2-sys-0.7.10.tar.gz) = 1176435
SHA256 (rust/crates/libz-sys-1.0.25.tar.gz) = 2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe
SIZE (rust/crates/libz-sys-1.0.25.tar.gz) = 650151
SHA256 (rust/crates/log-0.4.6.tar.gz) = c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6
SIZE (rust/crates/log-0.4.6.tar.gz) = 22303
SHA256 (rust/crates/matches-0.1.6.tar.gz) = 100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376
SIZE (rust/crates/matches-0.1.6.tar.gz) = 1916
SHA256 (rust/crates/memchr-2.0.1.tar.gz) = 796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d
SIZE (rust/crates/memchr-2.0.1.tar.gz) = 9858
SHA256 (rust/crates/num-0.1.42.tar.gz) = 4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e
SIZE (rust/crates/num-0.1.42.tar.gz) = 8323
SHA256 (rust/crates/num-integer-0.1.36.tar.gz) = f8d26da319fb45674985c78f1d1caf99aa4941f785d384a2ae36d0740bc3e2fe
SIZE (rust/crates/num-integer-0.1.36.tar.gz) = 12168
SHA256 (rust/crates/num-iter-0.1.35.tar.gz) = 4b226df12c5a59b63569dd57fafb926d91b385dfce33d8074a412411b689d593
SIZE (rust/crates/num-iter-0.1.35.tar.gz) = 9013
SHA256 (rust/crates/num-traits-0.2.0.tar.gz) = e7de20f146db9d920c45ee8ed8f71681fd9ade71909b48c3acbd766aa504cf10
SIZE (rust/crates/num-traits-0.2.0.tar.gz) = 29853
SHA256 (rust/crates/percent-encoding-1.0.1.tar.gz) = 31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831
SIZE (rust/crates/percent-encoding-1.0.1.tar.gz) = 10057
SHA256 (rust/crates/pkg-config-0.3.9.tar.gz) = 3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903
SIZE (rust/crates/pkg-config-0.3.9.tar.gz) = 11055
SHA256 (rust/crates/quote-0.3.15.tar.gz) = 7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a
SIZE (rust/crates/quote-0.3.15.tar.gz) = 12041
SHA256 (rust/crates/rand-0.4.2.tar.gz) = eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5
SIZE (rust/crates/rand-0.4.2.tar.gz) = 76170
SHA256 (rust/crates/redox_syscall-0.1.37.tar.gz) = 0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd
SIZE (rust/crates/redox_syscall-0.1.37.tar.gz) = 13980
SHA256 (rust/crates/redox_termios-0.1.1.tar.gz) = 7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76
SIZE (rust/crates/redox_termios-0.1.1.tar.gz) = 3227
SHA256 (rust/crates/remove_dir_all-0.3.0.tar.gz) = b5d2f806b0fcdabd98acd380dc8daef485e22bcb7cddc811d1337967f2528cf5
SIZE (rust/crates/remove_dir_all-0.3.0.tar.gz) = 8579
SHA256 (rust/crates/rustc-demangle-0.1.5.tar.gz) = aee45432acc62f7b9a108cc054142dac51f979e69e71ddce7d6fc7adf29e817e
SIZE (rust/crates/rustc-demangle-0.1.5.tar.gz) = 10099
SHA256 (rust/crates/slog-2.1.1.tar.gz) = 0a6b13b17f4225771f7f15cece704a4e68d3a5f31278ed26367f497133398a18
SIZE (rust/crates/slog-2.1.1.tar.gz) = 38752
SHA256 (rust/crates/slog-async-2.2.0.tar.gz) = 5e319a30c08b004618d5f7ca2f2b1dad7b4623ba7fcb1a12846fc3b01e9eaa10
SIZE (rust/crates/slog-async-2.2.0.tar.gz) = 12956
SHA256 (rust/crates/slog-term-2.3.0.tar.gz) = 5bb5d9360b2b279b326824b3b4ca2402ead8a8138f0e5ec1900605c861bb6671
SIZE (rust/crates/slog-term-2.3.0.tar.gz) = 17179
SHA256 (rust/crates/strsim-0.7.0.tar.gz) = bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550
SIZE (rust/crates/strsim-0.7.0.tar.gz) = 8435
SHA256 (rust/crates/syn-0.11.11.tar.gz) = d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad
SIZE (rust/crates/syn-0.11.11.tar.gz) = 63309
SHA256 (rust/crates/synom-0.11.3.tar.gz) = a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6
SIZE (rust/crates/synom-0.11.3.tar.gz) = 17120
SHA256 (rust/crates/synstructure-0.6.1.tar.gz) = 3a761d12e6d8dcb4dcf952a7a89b475e3a9d69e4a69307e01a470977642914bd
SIZE (rust/crates/synstructure-0.6.1.tar.gz) = 11257
SHA256 (rust/crates/take_mut-0.2.0.tar.gz) = 50b910a1174df4aeb5738e8a0e7253883cf7801de40d094175a5a557e487f4c5
SIZE (rust/crates/take_mut-0.2.0.tar.gz) = 4246
SHA256 (rust/crates/tempdir-0.3.6.tar.gz) = f73eebdb68c14bcb24aef74ea96079830e7fa7b31a6106e42ea7ee887c1e134e
SIZE (rust/crates/tempdir-0.3.6.tar.gz) = 11368
SHA256 (rust/crates/term-0.4.6.tar.gz) = fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1
SIZE (rust/crates/term-0.4.6.tar.gz) = 38250
SHA256 (rust/crates/termion-1.5.1.tar.gz) = 689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096
SIZE (rust/crates/termion-1.5.1.tar.gz) = 20659
SHA256 (rust/crates/textwrap-0.9.0.tar.gz) = c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693
SIZE (rust/crates/textwrap-0.9.0.tar.gz) = 15795
SHA256 (rust/crates/thread_local-0.3.5.tar.gz) = 279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963
SIZE (rust/crates/thread_local-0.3.5.tar.gz) = 11794
SHA256 (rust/crates/time-0.1.39.tar.gz) = a15375f1df02096fb3317256ce2cee6a1f42fc84ea5ad5fc8c421cfe40c73098
SIZE (rust/crates/time-0.1.39.tar.gz) = 29295
SHA256 (rust/crates/unicode-bidi-0.3.4.tar.gz) = 49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5
SIZE (rust/crates/unicode-bidi-0.3.4.tar.gz) = 32228
SHA256 (rust/crates/unicode-normalization-0.1.5.tar.gz) = 51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f
SIZE (rust/crates/unicode-normalization-0.1.5.tar.gz) = 290328
SHA256 (rust/crates/unicode-width-0.1.4.tar.gz) = bf3a113775714a22dcb774d8ea3655c53a32debae63a063acc00a91cc586245f
SIZE (rust/crates/unicode-width-0.1.4.tar.gz) = 15283
SHA256 (rust/crates/unicode-xid-0.0.4.tar.gz) = 8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc
SIZE (rust/crates/unicode-xid-0.0.4.tar.gz) = 16034
SHA256 (rust/crates/unreachable-1.0.0.tar.gz) = 382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56
SIZE (rust/crates/unreachable-1.0.0.tar.gz) = 6355
SHA256 (rust/crates/url-1.6.0.tar.gz) = fa35e768d4daf1d85733418a49fb42e10d7f633e394fccab4ab7aba897053fe2
SIZE (rust/crates/url-1.6.0.tar.gz) = 72377
SHA256 (rust/crates/vcpkg-0.2.2.tar.gz) = 9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b
SIZE (rust/crates/vcpkg-0.2.2.tar.gz) = 5870
SHA256 (rust/crates/vec_map-0.8.0.tar.gz) = 887b5b631c2ad01628bbbaa7dd4c869f80d3186688f8d0b6f58774fbe324988c
SIZE (rust/crates/vec_map-0.8.0.tar.gz) = 13742
SHA256 (rust/crates/void-1.0.2.tar.gz) = 6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d
SIZE (rust/crates/void-1.0.2.tar.gz) = 2356
SHA256 (rust/crates/winapi-0.2.8.tar.gz) = 167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a
SIZE (rust/crates/winapi-0.2.8.tar.gz) = 455145
SHA256 (rust/crates/winapi-0.3.4.tar.gz) = 04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3
SIZE (rust/crates/winapi-0.3.4.tar.gz) = 905247
SHA256 (rust/crates/winapi-build-0.1.1.tar.gz) = 2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc
SIZE (rust/crates/winapi-build-0.1.1.tar.gz) = 669
SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.tar.gz) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.tar.gz) = 2918815
SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz) = 2947998
SHA256 (tummychow-git-absorb-0.3.0_GH0.tar.gz) = 94d540a7febd37cd74e95e7cab71ee3514df020989208ce3fe83560699072730
SIZE (tummychow-git-absorb-0.3.0_GH0.tar.gz) = 15726

View File

@ -0,0 +1,9 @@
This is a port of the hg absorb plugin to git.
git absorb will automatically identify which commits are safe to modify,
and which indexed changes belong to each of those commits. It will then
write fixup! commits for each of those changes. You can check its output
manually if you don't trust it, and then fold the fixups into your
feature branch with git's built-in autosquash functionality.
WWW: https://github.com/tummychow/git-absorb