mirror of
https://github.com/NixOS/nix.git
synced 2025-11-26 04:00:59 +01:00
the command /nixstate/nix/bin/nix-state --run /nix/store/sig2qgvaayydrwy5hn6b2dm5r2ayhv5s-hellohardcodedstateworld-1.0 now causes state to be checked and comitted
This commit is contained in:
parent
653e557e81
commit
25117fd165
10 changed files with 378 additions and 202 deletions
80
src/nix-state/statecommit.sh
Executable file
80
src/nix-state/statecommit.sh
Executable file
|
|
@ -0,0 +1,80 @@
|
|||
#! /bin/sh
|
||||
|
||||
#TODO EXCLUDE PATHS AND MAKE PARAMETERS AND STORE OBJECT!
|
||||
#check if all needed ... exists, if not, exit with an error
|
||||
|
||||
svnbin=/nix/var/nix/profiles/per-user/root/profile/bin/svn
|
||||
subversionedpaths=( /nix/state/v6rr3yi5ilgn3k0kwxkk633ap4z0m1zi-hellohardcodedstateworld-1.0/ /nix/state/v6rr3yi5ilgn3k0kwxkk633ap4z0m1zi-hellohardcodedstateworld-1.0/log/ )
|
||||
subversionedpathsInterval=( 0 0 )
|
||||
nonversionedpaths=( /nix/state/v6rr3yi5ilgn3k0kwxkk633ap4z0m1zi-hellohardcodedstateworld-1.0/cache/ /nix/state/v6rr3yi5ilgn3k0kwxkk633ap4z0m1zi-hellohardcodedstateworld-1.0/log/test/ /nix/state/v6rr3yi5ilgn3k0kwxkk633ap4z0m1zi-hellohardcodedstateworld-1.0/log/test2/test2/ /nix/state/v6rr3yi5ilgn3k0kwxkk633ap4z0m1zi-hellohardcodedstateworld-1.0/logging/ )
|
||||
checkouts=( "/nix/var/nix/profiles/per-user/root/profile/bin/svn checkout file:///nix/staterepos/99dj5zg1ginj5as75nkb0psnp02krv2s-hellohardcodedstateworld-1.0 /nix/state/v6rr3yi5ilgn3k0kwxkk633ap4z0m1zi-hellohardcodedstateworld-1.0/" "/nix/var/nix/profiles/per-user/root/profile/bin/svn checkout file:///nix/staterepos/9ph3nd4irpvgs66h24xjvxrwpnrwy9n0-hellohardcodedstateworld-1.0 /nix/state/v6rr3yi5ilgn3k0kwxkk633ap4z0m1zi-hellohardcodedstateworld-1.0/log/" )
|
||||
|
||||
# if a dir exists, get his rev. number or check it out again (maybe the dir was deleted)
|
||||
|
||||
i=0
|
||||
for path in ${subversionedpaths[@]}
|
||||
do
|
||||
if test -d $path; then
|
||||
cd $path;
|
||||
output=$($svnbin stat 2>&1 | grep "is not a working copy");
|
||||
if [ "$output" != "" ] ; then #if the dir exists but is not yet an svn dir: create repos, if it doenst exits (is removed or something) than we dont do anything
|
||||
${checkouts[$i]};
|
||||
|
||||
repos=$(svn info | grep "Repository Root" | sed 's/Repository Root: //'); # get the revision number of the repository
|
||||
revision=$(svn info $repos | grep "Revision: " | sed 's/Revision: //');
|
||||
interval=${subversionedpathsInterval[$i]};
|
||||
|
||||
#TODO BUG !!!!!!!! THE REVISION DOESNT GO UP WE NEED A DB CONNECTION OR A FILE TO HOLD A COUNTER ...!
|
||||
|
||||
if [ "$interval" = "0" ] || [ "$($revision % $interval)" = "0" ]; then # if we dont have an interval or the interval is due... commit
|
||||
|
||||
allsubdirs=( $(echo *) );
|
||||
subdirs=();
|
||||
for subdir in ${allsubdirs[@]} #add all, exlucding explicity stated direct versioned-subdirs or explicity stated nonversioned-subdirs
|
||||
do #this is only to prevent some warnings, ultimately we would like svn add to have a option 'exclude dirs'
|
||||
subdir="$(pwd)/$subdir/";
|
||||
exclude=0;
|
||||
|
||||
for svnp in ${subversionedpaths[@]} #check if the subdir is in the list of subverioned paths
|
||||
do
|
||||
if [ "$svnp" = "$subdir" ]; then
|
||||
exclude=1;
|
||||
fi
|
||||
done
|
||||
|
||||
for nonvp in ${nonversionedpaths[@]} #check if the subdir is in the list of dirs that aren't supposed to be versioned
|
||||
do
|
||||
if [ "$nonvp" = "$subdir" ]; then
|
||||
exclude=1;
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $exclude = 0 ]; then #If it is ... that we exclude the subdir
|
||||
subdirs[${#subdirs[*]}]=$subdir
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$subdirs" != "" ]; then
|
||||
svn add $subdirs; #add all subdirs
|
||||
|
||||
for revpath in ${nonversionedpaths[@]} #We need to revert sub-sub* dirs, since these havent been excluded
|
||||
do
|
||||
if test -d $revpath; then
|
||||
if [ "${revpath:0:${#path}}" == "$path" ]; then
|
||||
#echo "$path revert $revpath";
|
||||
svn revert $revpath;
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
svn -m "" commit; #Finally, we commit
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
cd - &> /dev/null;
|
||||
fi
|
||||
let "i+=1"
|
||||
done
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue