An Interest In:
Web News this Week
- March 21, 2024
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
Quickly Grab Stuff From Your Git History
While working through a problem, my colleague remembered a prior version of our application had a syntax example we could use. Thankfully, the codebase has been checked into git
! We knew the code in question revolved around the mkDerivation
functionality in nix.
Since then, this particular code has been moved out of our codebase and added to nixpkgs
, so we can pull the derivation from the main tree instead of defining our own out-of-tree logic. My first instinct was to start digging through that (huge) repository to find the file and use that as a reference.
No need! We have it in our git
history. We can query this using git log -S
:
$ git log -S mkDerivationcommit 3a275488e740ae1b4314208a908c5300f9563ee0Author: David Yamnitsky <[email protected]>Date: Mon Jul 19 11:51:47 2021 -0400 use mold and wasm-bindgen from nixpkgscommit a3a042b5b90ad57ff11bc47a5db6e68dc1ca55e7Author: David Yamnitsky <[email protected]>Date: Wed Jun 16 10:26:35 2021 -0400 use mold as the linker to speed up incremental compiles on x86_64-linux
Beautiful - that top commit looks like it represents when we switched to pull this derivation directly from nixpkgs
. Removing the code is sufficient - each git
commit represents a diff. This commit should show us the code:
$ git show 3a275488e740ae1b4314208a908c5300f9563ee0commit 3a275488e740ae1b4314208a908c5300f9563ee0Author: David Yamnitsky <[email protected]>Date: Mon Jul 19 11:51:47 2021 -0400 use mold and wasm-bindgen from nixpkgs...flake. nix1: { inputs = { nixpkgs = { url = "github:nixos/nixpkgs/nixos-unstable"; url = "github:nixos/nixpkgs/nixos-unstable-small"; }; flake-utils = { url = "github:numtide/flake-utils";48: CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER = toString ./. + "/scripts/clang"; CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_LINKER = "lld"; buildInputs = with pkgs; [ (stdenv.mkDerivation { pname = "mold"; version = "0.9.1"; src = fetchgit { url = "https://github.com/rui314/mold"; rev = "v0.9.1"; sha256 = "sha256-yIkW6OCXhlHZ1jC8/yMAdJbSgY9K40POT2zWv6wYr5E="; }; nativeBuildInputs = [ clang_12 cmake lld_12 tbb xxHash zlib openssl git ]; dontUseCmakeConfigure = "true"; buildPhase = "make -j $NIX_BUILD_CORES"; installPhase = "mkdir -p $out $out/bin $out/share/man/man1 && PREFIX=$out make install"; }) cachix cargo-insta clang_12
There it is, in the text! In my terminal, additions are highlighted in green and removals are in red. This was a removal, but you still get the full removed text. I was able to copy that stdenv.mkDerivation
code and work from there. Thanks, git
. (Thit).
As an aside, I highly recommend the following git
alias:
l = "log --all --graph --decorate --abbrev-commit --format=format:'%C(bold blue)%h%C(reset) - %C(bold white)%an%C(reset) %C(bold yellow)%d%C(reset)%n%C(bold cyan)%aD%C(reset) - %C(bold green)(%ar)%C(reset)%n%C(white)%s%C(reset)'";
It's a mess of text, but it produces super easy to read git histories:
* 9b24232 - Ben Lovy (HEAD -> main, origin/main, origin/HEAD)| Fri, 22 Oct 2021 11:49:42 -0400 - (8 hours ago)| Remove maplit* 65016b6 - David Yamnitsky | Fri, 22 Oct 2021 11:39:12 -0400 - (8 hours ago)| update deps| * 6d55d3e - Ben Lovy (refs/stash)|/| Fri, 22 Oct 2021 11:49:01 -0400 - (8 hours ago)| | WIP on main: e07e691 clear 1.56 warnings| * 6bf8ab1 - Ben Lovy |/ Fri, 22 Oct 2021 11:49:01 -0400 - (8 hours ago)| index on main: e07e691 clear 1.56 warnings* e07e691 - David Yamnitsky | Fri, 22 Oct 2021 11:09:02 -0400 - (8 hours ago)| clear 1.56 warnings
The coloration doesn't reflect here, in your terminal this will be even cooler. As a git
novice, this sort of output is instrumental in keeping track of changes to the codebase.
Original Link: https://dev.to/deciduously/quickly-grab-stuff-from-your-git-history-2bon
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To