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 functiona…


This content originally appeared on DEV Community and was authored by Ben Lovy

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 mkDerivation
commit 3a275488e740ae1b4314208a908c5300f9563ee0
Author: David Yamnitsky <david@yamnitsky.com>
Date:   Mon Jul 19 11:51:47 2021 -0400

    use mold and wasm-bindgen from nixpkgs

commit a3a042b5b90ad57ff11bc47a5db6e68dc1ca55e7
Author: David Yamnitsky <david@yamnitsky.com>
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 3a275488e740ae1b4314208a908c5300f9563ee0
commit 3a275488e740ae1b4314208a908c5300f9563ee0
Author: David Yamnitsky <david@yamnitsky.com>
Date:   Mon Jul 19 11:51:47 2021 -0400

    use mold and wasm-bindgen from nixpkgs
...
flake. nix

───┐
1: │
───┘
{
  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.


This content originally appeared on DEV Community and was authored by Ben Lovy


Print Share Comment Cite Upload Translate Updates
APA

Ben Lovy | Sciencx (2021-10-22T23:30:11+00:00) Quickly Grab Stuff From Your Git History. Retrieved from https://www.scien.cx/2021/10/22/quickly-grab-stuff-from-your-git-history/

MLA
" » Quickly Grab Stuff From Your Git History." Ben Lovy | Sciencx - Friday October 22, 2021, https://www.scien.cx/2021/10/22/quickly-grab-stuff-from-your-git-history/
HARVARD
Ben Lovy | Sciencx Friday October 22, 2021 » Quickly Grab Stuff From Your Git History., viewed ,<https://www.scien.cx/2021/10/22/quickly-grab-stuff-from-your-git-history/>
VANCOUVER
Ben Lovy | Sciencx - » Quickly Grab Stuff From Your Git History. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/10/22/quickly-grab-stuff-from-your-git-history/
CHICAGO
" » Quickly Grab Stuff From Your Git History." Ben Lovy | Sciencx - Accessed . https://www.scien.cx/2021/10/22/quickly-grab-stuff-from-your-git-history/
IEEE
" » Quickly Grab Stuff From Your Git History." Ben Lovy | Sciencx [Online]. Available: https://www.scien.cx/2021/10/22/quickly-grab-stuff-from-your-git-history/. [Accessed: ]
rf:citation
» Quickly Grab Stuff From Your Git History | Ben Lovy | Sciencx | https://www.scien.cx/2021/10/22/quickly-grab-stuff-from-your-git-history/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.