On 09/04/2014 04:53 PM, Richard Purdie wrote:
On Thu, 2014-09-04 at 16:49 +0800, Robert Yang wrote:

On 09/04/2014 04:27 PM, Richard Purdie wrote:
On Thu, 2014-09-04 at 00:05 -0700, Robert Yang wrote:
Update the sstate file's timestamps after it is installed, it will be
very useful for removing the old sstate file, especially, it's not easy
to remove when use the shared SSTATE_DIR, we can easily remove them with
this change, for example:

$ find state-cache -type f -ctime +10 -exec rm -f {} \;

Will remove the sstate file which isn't used by recent 10 days.

We can use the -atime, but it is not always available, for example,
when mounted with "-o noatime".

The touch is a very light weight action, and the
scripts/sstate-cache-management.sh also requires this.

Signed-off-by: Robert Yang <[email protected]>
---
   meta/classes/sstate.bbclass |    1 +
   1 file changed, 1 insertion(+)

diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index ead829e..885912d 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -618,6 +618,7 @@ sstate_unpack_package () {
        mkdir -p ${SSTATE_INSTDIR}
        cd ${SSTATE_INSTDIR}
        tar -xmvzf ${SSTATE_PKG}
+       touch --no-dereference ${SSTATE_PKG}
   }

   BB_HASHCHECK_FUNCTION = "sstate_checkhashes"

At the very least we need to consider read only files here...

Hello, did you mean the SSTATE_MIRRORS ? I thought that I had
considered it since I used the "touch --no-dereference",
make a clear check is reasonable if I understand correctly,
so updated the code in the repo: (The --no-dereference is not
need any more since the "test -w" follows symlink).

We need the --no-dereferece but this could also be a readonly directory

Under more thoughts, yes, we need the --no-dereferece otherwise the
touch may update the file in the SSTATE_MIRRORS, and it's safe to touch
a symlink itself (though "test -w" follows symlink) since the permissions
of symbolic links are never used.

For readonly_dir/ssfile, we can touch the ssfile if "test -w ssfile",
it doesn't care about the dir's write permission. Or do we have to
check the permission of "dirname ${SSTATE_PKG}" and ${SSTATE_DIR} ?
I don't think that we need unless it causes errors.

For the ISO, the "test -w {SSTATE_PKG}" would fail so that no touch,
here is the updated code, also in the repo:

diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index ead829e..78766c0 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -618,6 +618,8 @@ sstate_unpack_package () {
        mkdir -p ${SSTATE_INSTDIR}
        cd ${SSTATE_INSTDIR}
        tar -xmvzf ${SSTATE_PKG}
+       # Use "! -w ||" to return true for read only files
+       [ ! -w ${SSTATE_PKG} ] || touch ${SSTATE_PKG}
 }

// Robert

or set of readonly files (think an ISO shipped with WR Linux or locked
sstate cache).

Cheers,

Richard



--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to