diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/default.nix | 14 | ||||
| -rw-r--r-- | lib/git.nix | 41 | 
2 files changed, 53 insertions, 2 deletions
| diff --git a/lib/default.nix b/lib/default.nix index 26653d9..27cf0e2 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -3,10 +3,20 @@  with builtins;  let -  inherit (lib) stringAsChars; +  inherit (lib) mapAttrs stringAsChars;  in -{ +rec { +  git = import ./git.nix { +    lib = lib // { +      inherit addNames; +    }; +  }; + +  addName = name: set: +    set // { inherit name; }; + +  addNames = mapAttrs addName;    # "7.4.335" -> "74" diff --git a/lib/git.nix b/lib/git.nix new file mode 100644 index 0000000..5916cf8 --- /dev/null +++ b/lib/git.nix @@ -0,0 +1,41 @@ +{ lib, ... }: + +let +  inherit (lib) addNames; + +  commands = addNames { +    git-receive-pack = {}; +    git-upload-pack = {}; +  }; + +  receive-modes = addNames { +    fast-forward = {}; +    non-fast-forward = {}; +    create = {}; +    delete = {}; +    merge = {}; # TODO implement in git.nix +  }; + +  permissions = { +    fetch = { +      allow-commands = [ +        commands.git-upload-pack +      ]; +    }; + +    push = ref: extra-modes: { +      allow-commands = [ +        commands.git-receive-pack +        commands.git-upload-pack +      ]; +      allow-receive-ref = ref; +      allow-receive-modes = [ receive-modes.fast-forward ] ++ extra-modes; +    }; +  }; + +  refs = { +    master = "refs/heads/master"; +    all-heads = "refs/heads/*"; +  }; +in +commands // receive-modes // permissions // refs | 
