Patchwork [1/1] sstate-cache-management.sh: fix it for downloaded file

login
register
mail settings
Submitter Robert Yang
Date Aug. 29, 2012, 9:24 a.m.
Message ID <c238c31c55c60ffb823f7158dc7eb3922bd02ed3.1346230461.git.liezhi.yang@windriver.com>
Download mbox | patch
Permalink /patch/35477/
State Accepted
Commit 12ed7e6bb215e70b119d5ce123e36e2fd380ff1e
Headers show

Comments

Robert Yang - Aug. 29, 2012, 9:24 a.m.
Fix it for the downloaded sstate cache file
* The downloaded sstate cache file is in SSTATE_DIR, and there is a
  symlink points to it, the sstate cache file should not be removed if
  the corresponding symlink is kept, it would be removed when the
  symlink is removed (with -L option).

* Fix a comment line.

[YOCTO #2897]

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
 scripts/sstate-cache-management.sh | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

Patch

diff --git a/scripts/sstate-cache-management.sh b/scripts/sstate-cache-management.sh
index 3a5980c..a1f7c89 100755
--- a/scripts/sstate-cache-management.sh
+++ b/scripts/sstate-cache-management.sh
@@ -211,8 +211,25 @@  remove_duplicated () {
           for arch in $ava_archs; do
               grep -h "/$fn-$arch-" $list_suffix >>$fn_tmp
           done
-          # Use the access time, also delete the .siginfo file
+          # Use the modification time
           to_del=$(ls -t $(cat $fn_tmp) | sed -n '1!p')
+          # The sstate file which is downloaded from the SSTATE_MIRROR is
+          # put in SSTATE_DIR, and there is a symlink in SSTATE_DIR/??/ to
+          # it, so filter it out from the remove list if it should not be
+          # removed.
+          to_keep=$(ls -t $(cat $fn_tmp) | sed -n '1p')
+          for k in $to_keep; do
+              if [ -L "$k" ]; then
+                  # The symlink's destination
+                  k_dest="`readlink -e $k`"
+                  # Maybe it is the one in cache_dir
+                  k_maybe="$cache_dir/${k##/*/}"
+                  # Remove it from the remove list if they are the same.
+                  if [ "$k_dest" = "$k_maybe" ]; then
+                      to_del="`echo $to_del | sed 's#'\"$k_maybe\"'##g'`"
+                  fi
+              fi
+          done
           rm -f $fn_tmp
           gen_rmlist $rm_list "$to_del"
       done
@@ -221,6 +238,7 @@  remove_duplicated () {
       let total_deleted=$total_deleted+$deleted
   done
   rm -f $list_suffix
+  rm -f $sstate_list
   if [ $total_deleted -gt 0 ]; then
       read_confirm
       if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then