diff options
author | Nicolas B. Pierron <nicolas.b.pierron@gmail.com> | 2014-12-18 22:25:21 +0100 |
---|---|---|
committer | Nicolas B. Pierron <nicolas.b.pierron@gmail.com> | 2014-12-18 22:25:21 +0100 |
commit | 9334085e80600e4baf9561b3a9836937a6f73d5f (patch) | |
tree | af3f9869d5a83391dd1d529e9ad492747d6c13f5 | |
parent | d7edec4888fae4bd4611d94e89b1af234fdacbc4 (diff) | |
download | nixlib-9334085e80600e4baf9561b3a9836937a6f73d5f.tar nixlib-9334085e80600e4baf9561b3a9836937a6f73d5f.tar.gz nixlib-9334085e80600e4baf9561b3a9836937a6f73d5f.tar.bz2 nixlib-9334085e80600e4baf9561b3a9836937a6f73d5f.tar.lz nixlib-9334085e80600e4baf9561b3a9836937a6f73d5f.tar.xz nixlib-9334085e80600e4baf9561b3a9836937a6f73d5f.tar.zst nixlib-9334085e80600e4baf9561b3a9836937a6f73d5f.zip |
update-channel-branches.sh: Add verbosity to improve the user experience, and update NixOS documentation.
-rwxr-xr-x | maintainers/scripts/update-channel-branches.sh | 88 | ||||
-rw-r--r-- | nixos/doc/manual/development/sources.xml | 18 |
2 files changed, 80 insertions, 26 deletions
diff --git a/maintainers/scripts/update-channel-branches.sh b/maintainers/scripts/update-channel-branches.sh index d7fbcb756909..5dbbec9393c3 100755 --- a/maintainers/scripts/update-channel-branches.sh +++ b/maintainers/scripts/update-channel-branches.sh @@ -1,8 +1,48 @@ #!/bin/sh : ${NIXOS_CHANNELS:=https://nixos.org/channels/} +: ${CHANNELS_NAMESPACE:=refs/heads/channels/} + +# List all channels which are currently in the repository which we would +# have to remove if they are not found again. +deadChannels=$(git for-each-ref --format="%(refname)" $CHANNELS_NAMESPACE) + +function updateRef() { + local channelName=$1 + local newRev=$2 + + # if the inputs are not valid, then we do not update any branch. + test -z "$newRev" -o -z "$channelName" && return; + + # Update the local refs/heads/channels/* branches to be in-sync with the + # channel references. + local branch=$CHANNELS_NAMESPACE$channelName + oldRev=$(git rev-parse --short $branch 2>/dev/null || true) + if test "$oldRev" != "$newRev"; then + if git update-ref $branch $newRev 2>/dev/null; then + if test -z "$oldRev"; then + echo " * [new branch] $newRev -> ${branch#refs/heads/}" + else + echo " $oldRev..$newRev -> ${branch#refs/heads/}" + fi + else + if test -z "$oldRev"; then + echo " * [missing rev] $newRev -> ${branch#refs/heads/}" + else + echo " [missing rev] $oldRev..$newRev -> ${branch#refs/heads/}" + fi + fi + fi + + # Filter out the current channel from the list of dead channels. + deadChannels=$(grep -v $CHANNELS_NAMESPACE$channelName <<EOF +$deadChannels +EOF +) +} # Find the name of all channels which are listed in the directory. +echo "Fetching channels from $NIXOS_CHANNELS:" for channelName in : $(curl -s $NIXOS_CHANNELS | sed -n '/folder/ { s,.*href=",,; s,/".*,,; p }'); do test "$channelName" = : && continue; @@ -10,50 +50,62 @@ for channelName in : $(curl -s $NIXOS_CHANNELS | sed -n '/folder/ { s,.*href=",, # short-changeset from the name of the directory where we are # redirected to. sha1=$(curl -sI $NIXOS_CHANNELS$channelName | sed -n '/Location/ { s,.*\.\([a-f0-9]*\)[ \r]*$,\1,; p; }') - test -z "$sha1" -o -z "$channelName" && continue; - # Update the local refs/heads/channels/remotes/* branches to be - # in-sync with the channel references. - git update-ref refs/heads/channels/remotes/$channelName $sha1 + updateRef "remotes/$channelName" "$sha1" done +echo "Fetching channels from nixos-version:" if currentSystem=$(nixos-version 2>/dev/null); then - channelName=current-system - # If the system is entirely build from a custom nixpkgs version, # then the version is not annotated in git version. This sed # expression is basically matching that the expressions end with # ".<sha1> (Name)" to extract the sha1. sha1=$(echo $currentSystem | sed -n 's,^.*\.\([a-f0-9]*\) *(.*)$,\1,; T skip; p; :skip;') - if test -n "$sha1"; then - # Update the local refs/heads/channels/locals/* branches to be - # in-sync with the channel references. - git update-ref refs/heads/channels/locals/$channelName $sha1 - fi + updateRef current-system "$sha1" fi +echo "Fetching channels from ~/.nix-defexpr:" for revFile in : $(find -L ~/.nix-defexpr/ -maxdepth 4 -name svn-revision); do test "$revFile" = : && continue; # Deconstruct a path such as, into: + # # /home/luke/.nix-defexpr/channels_root/nixos/nixpkgs/svn-revision - # user=root repo=nixos channelName=root/nixos + # channelName = root/nixos # # /home/luke/.nix-defexpr/channels/nixpkgs/svn-revision - # user=luke repo=nixpkgs channelName=luke/nixpkgs + # channelName = nixpkgs + # user=${revFile#*.nix-defexpr/channels} repo=${user#*/} repo=${repo%%/*} user=${user%%/*} user=${user#_} test -z "$user" && user=$USER - channelName="$user/$repo" + channelName="$user${user:+/}$repo" sha1=$(cat $revFile | sed -n 's,^.*\.\([a-f0-9]*\)$,\1,; T skip; p; :skip;') - test -z "$sha1" -o -z "$channelName" && continue; - # Update the local refs/heads/channels/locals/* branches to be - # in-sync with the channel references. - git update-ref refs/heads/channels/locals/$channelName $sha1 + updateRef "$channelName" "$sha1" done + +# Suggest to remove channel branches which are no longer found by this +# script. This is to handle the cases where a local/remote channel +# disappear. We should not attempt to remove manually any branches, as they +# might be user branches. +if test -n "$deadChannels"; then + + echo " +Some old channel branches are still in your repository, if you +want to remove them, run the following command(s): +" + + while read branch; do + echo " git update-ref -d $branch" + done <<EOF +$deadChannels +EOF + + echo +fi diff --git a/nixos/doc/manual/development/sources.xml b/nixos/doc/manual/development/sources.xml index f9fadd6bf5ed..3ac07da19f12 100644 --- a/nixos/doc/manual/development/sources.xml +++ b/nixos/doc/manual/development/sources.xml @@ -40,20 +40,22 @@ rebuild everything from source. So you may want to create a local branch based on your current NixOS version: <screen> -$ nixos-version -14.04.273.ea1952b (Baboon) - -$ git checkout -b local ea1952b +$ <replaceable>/my/sources</replaceable>/nixpkgs/maintainers/scripts/update-channel-branches.sh +Fetching channels from https://nixos.org/channels: + * [new branch] cbe467e -> channels/remotes/nixos-unstable +Fetching channels from nixos-version: + * [new branch] 9ff4738 -> channels/current-system +Fetching channels from ~/.nix-defexpr: + * [new branch] 0d4acad -> channels/root/nixos +$ git checkout -b local channels/current-system </screen> Or, to base your local branch on the latest version available in the NixOS channel: <screen> -$ curl -sI https://nixos.org/channels/nixos-unstable/ | grep Location -Location: https://releases.nixos.org/nixos/unstable/nixos-14.10pre43986.acaf4a6/ - -$ git checkout -b local acaf4a6 +$ <replaceable>/my/sources</replaceable>/nixpkgs/maintainers/scripts/update-channel-branches.sh +$ git checkout -b local channels/remotes/nixos-unstable </screen> You can then use <command>git rebase</command> to sync your local |