update-channel-branches.sh: Add verbosity to improve the user experience, and update NixOS documentation.
This commit is contained in:
parent
d7edec4888
commit
9334085e80
|
@ -1,8 +1,48 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
: ${NIXOS_CHANNELS:=https://nixos.org/channels/}
|
: ${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.
|
# 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
|
for channelName in : $(curl -s $NIXOS_CHANNELS | sed -n '/folder/ { s,.*href=",,; s,/".*,,; p }'); do
|
||||||
test "$channelName" = : && continue;
|
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
|
# short-changeset from the name of the directory where we are
|
||||||
# redirected to.
|
# redirected to.
|
||||||
sha1=$(curl -sI $NIXOS_CHANNELS$channelName | sed -n '/Location/ { s,.*\.\([a-f0-9]*\)[ \r]*$,\1,; p; }')
|
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
|
updateRef "remotes/$channelName" "$sha1"
|
||||||
# in-sync with the channel references.
|
|
||||||
git update-ref refs/heads/channels/remotes/$channelName $sha1
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
echo "Fetching channels from nixos-version:"
|
||||||
if currentSystem=$(nixos-version 2>/dev/null); then
|
if currentSystem=$(nixos-version 2>/dev/null); then
|
||||||
channelName=current-system
|
|
||||||
|
|
||||||
# If the system is entirely build from a custom nixpkgs version,
|
# If the system is entirely build from a custom nixpkgs version,
|
||||||
# then the version is not annotated in git version. This sed
|
# then the version is not annotated in git version. This sed
|
||||||
# expression is basically matching that the expressions end with
|
# expression is basically matching that the expressions end with
|
||||||
# ".<sha1> (Name)" to extract the sha1.
|
# ".<sha1> (Name)" to extract the sha1.
|
||||||
sha1=$(echo $currentSystem | sed -n 's,^.*\.\([a-f0-9]*\) *(.*)$,\1,; T skip; p; :skip;')
|
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
|
updateRef current-system "$sha1"
|
||||||
# in-sync with the channel references.
|
|
||||||
git update-ref refs/heads/channels/locals/$channelName $sha1
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Fetching channels from ~/.nix-defexpr:"
|
||||||
for revFile in : $(find -L ~/.nix-defexpr/ -maxdepth 4 -name svn-revision); do
|
for revFile in : $(find -L ~/.nix-defexpr/ -maxdepth 4 -name svn-revision); do
|
||||||
test "$revFile" = : && continue;
|
test "$revFile" = : && continue;
|
||||||
|
|
||||||
# Deconstruct a path such as, into:
|
# Deconstruct a path such as, into:
|
||||||
|
#
|
||||||
# /home/luke/.nix-defexpr/channels_root/nixos/nixpkgs/svn-revision
|
# /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
|
# /home/luke/.nix-defexpr/channels/nixpkgs/svn-revision
|
||||||
# user=luke repo=nixpkgs channelName=luke/nixpkgs
|
# channelName = nixpkgs
|
||||||
|
#
|
||||||
user=${revFile#*.nix-defexpr/channels}
|
user=${revFile#*.nix-defexpr/channels}
|
||||||
repo=${user#*/}
|
repo=${user#*/}
|
||||||
repo=${repo%%/*}
|
repo=${repo%%/*}
|
||||||
user=${user%%/*}
|
user=${user%%/*}
|
||||||
user=${user#_}
|
user=${user#_}
|
||||||
test -z "$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;')
|
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
|
updateRef "$channelName" "$sha1"
|
||||||
# in-sync with the channel references.
|
|
||||||
git update-ref refs/heads/channels/locals/$channelName $sha1
|
|
||||||
done
|
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
|
||||||
|
|
|
@ -40,20 +40,22 @@ rebuild everything from source. So you may want to create a local
|
||||||
branch based on your current NixOS version:
|
branch based on your current NixOS version:
|
||||||
|
|
||||||
<screen>
|
<screen>
|
||||||
$ nixos-version
|
$ <replaceable>/my/sources</replaceable>/nixpkgs/maintainers/scripts/update-channel-branches.sh
|
||||||
14.04.273.ea1952b (Baboon)
|
Fetching channels from https://nixos.org/channels:
|
||||||
|
* [new branch] cbe467e -> channels/remotes/nixos-unstable
|
||||||
$ git checkout -b local ea1952b
|
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>
|
</screen>
|
||||||
|
|
||||||
Or, to base your local branch on the latest version available in the
|
Or, to base your local branch on the latest version available in the
|
||||||
NixOS channel:
|
NixOS channel:
|
||||||
|
|
||||||
<screen>
|
<screen>
|
||||||
$ curl -sI https://nixos.org/channels/nixos-unstable/ | grep Location
|
$ <replaceable>/my/sources</replaceable>/nixpkgs/maintainers/scripts/update-channel-branches.sh
|
||||||
Location: https://releases.nixos.org/nixos/unstable/nixos-14.10pre43986.acaf4a6/
|
$ git checkout -b local channels/remotes/nixos-unstable
|
||||||
|
|
||||||
$ git checkout -b local acaf4a6
|
|
||||||
</screen>
|
</screen>
|
||||||
|
|
||||||
You can then use <command>git rebase</command> to sync your local
|
You can then use <command>git rebase</command> to sync your local
|
||||||
|
|
Loading…
Reference in New Issue