Compare commits

..
7 Commits
Author SHA1 Message Date
Patrick McCarty 8ac1869adf Call checkrenamed() with correct arguments
Some of the renames tests omitted the leading forward slash for the two
function arguments, so add them here.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-04-19 11:15:26 -07:00
Patrick McCarty fde00265e2 test: fix some typos in checkrenamed()
Due to these typos being present, several tests were passing that should
not have been.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-04-19 11:15:26 -07:00
Matthew Johnson 25d3ef658d Add deprecation message to README
Signed-off-by: Matthew Johnson <matthew.johnson@intel.com>
2018-04-19 11:04:08 -07:00
Matthew Johnson 3cf2ade205 Release v3.7.5
This release specifies that /usr/src/kernel/* files are not state files.
These files are needed to ship kernel source files for kernel
development.

Signed-off-by: Matthew Johnson <matthew.johnson@intel.com>
2017-12-13 16:47:30 -08:00
Miguel Bernal Marin e814a73480 heuristics: set /usr/src/kernel as not state dir
The kernel sources will be shipped in /usr/src/kernel but /usr/src/* is
state.

This commit enables /usr/src/kernel and its contents as a no state
directory.

Fixes #108

Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
2017-12-13 16:40:27 -08:00
Matthew Johnson 9d3a813859 Release v3.7.4
This release cleans up renamed-to files by unsetting their rename flag
when orphaned. This was previously only being done for renamed-from
files.

Signed-off-by: Matthew Johnson <matthew.johnson@intel.com>
2017-12-05 12:21:44 -08:00
Matthew Johnson 5aa1bf9188 Also clean renamed-to files by unsetting the rename bit
Signed-off-by: Matthew Johnson <matthew.johnson@intel.com>
2017-12-05 12:21:35 -08:00
6 changed files with 50 additions and 20 deletions
+9
View File
@@ -1,3 +1,12 @@
With the release of mixer-tools v4.3.0 [1] the swupd-server project is
deprecated. All functionality has been re-written into the mixer tool under
the `mixer build update` command. All development done around creating update
content consumed by swupd-client is now done in that project.
[1] https://github.com/clearlinux/mixer-tools
---
The swupd-server package provides a reference implementation of a software The swupd-server package provides a reference implementation of a software
update server-side component that generates update content consumable by a update server-side component that generates update content consumable by a
software update client (swupd-client). Such content includes manifests that software update client (swupd-client). Such content includes manifests that
+1 -1
View File
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_PREREQ([2.66]) AC_PREREQ([2.66])
AC_INIT(swupd-server, 3.7.3, matthew.johnson@intel.com) AC_INIT(swupd-server, 3.7.5, matthew.johnson@intel.com)
AM_INIT_AUTOMAKE([foreign -Wall -W subdir-objects]) AM_INIT_AUTOMAKE([foreign -Wall -W subdir-objects])
AM_SILENT_RULES([yes]) AM_SILENT_RULES([yes])
AC_PROG_CC AC_PROG_CC
+8 -1
View File
@@ -45,6 +45,7 @@ static void runtime_state_heuristics(struct file *file)
/* these are shipped directories that are not themselves state, /* these are shipped directories that are not themselves state,
* rather only their contents are state */ * rather only their contents are state */
if ((strcmp(file->filename, "/usr/src/debug") == 0) || if ((strcmp(file->filename, "/usr/src/debug") == 0) ||
(strcmp(file->filename, "/usr/src/kernel") == 0) ||
(strcmp(file->filename, "/dev") == 0) || (strcmp(file->filename, "/dev") == 0) ||
(strcmp(file->filename, "/home") == 0) || (strcmp(file->filename, "/home") == 0) ||
(strcmp(file->filename, "/proc") == 0) || (strcmp(file->filename, "/proc") == 0) ||
@@ -56,6 +57,12 @@ static void runtime_state_heuristics(struct file *file)
return; return;
} }
/* the contents of these directory are not state,
* but it belongs to a state directory */
if ((strncmp(file->filename, "/usr/src/kernel/", 16) == 0)) {
return;
}
/* the contents of these directory are state, ideally this never /* the contents of these directory are state, ideally this never
* triggers if our package builds are clean */ * triggers if our package builds are clean */
if ((strncmp(file->filename, "/dev/", 5) == 0) || if ((strncmp(file->filename, "/dev/", 5) == 0) ||
@@ -72,7 +79,7 @@ static void runtime_state_heuristics(struct file *file)
return; return;
} }
/* these are commonly added directories for user customizatio, /* these are commonly added directories for user customization,
* ideally this never triggers if our package builds are clean */ * ideally this never triggers if our package builds are clean */
if ((strncmp(file->filename, "/acct", 5) == 0) || if ((strncmp(file->filename, "/acct", 5) == 0) ||
(strncmp(file->filename, "/cache", 6) == 0) || (strncmp(file->filename, "/cache", 6) == 0) ||
+9 -5
View File
@@ -1037,12 +1037,16 @@ void clean_renames(struct manifest *manifest)
list = g_list_first(manifest->files); list = g_list_first(manifest->files);
while (list) { while (list) {
file = list->data; file = list->data;
/* if the file is marked as deleted and renamed it is a /* if a file is marked as a rename but has lost its rename_peer
* renamed-from file. If the rename_peer field is still NULL * it needs to be cleaned up */
* then it has been orphaned. Mark these as deleted */ if (file->is_rename && !file->rename_peer) {
if (file->is_deleted && file->is_rename && !file->rename_peer) { /* no longer a rename */
hash_set_zeros(file->hash);
file->is_rename = 0; file->is_rename = 0;
/* if the file is marked as deleted and renamed it is a
* renamed-from file. Mark these as deleted now */
if (file->is_deleted) {
hash_set_zeros(file->hash);
}
} }
list = g_list_next(list); list = g_list_next(list);
@@ -34,15 +34,19 @@ setup() {
# /usr/lib/bar and /one will be renamed to /usr/lib/baz and /two # /usr/lib/bar and /one will be renamed to /usr/lib/baz and /two
gen_file_plain_with_content 10 test-bundle /usr/lib/bar "$(seq 100)" gen_file_plain_with_content 10 test-bundle /usr/lib/bar "$(seq 100)"
gen_file_plain_with_content 10 test-bundle /one "$(printf 'a%.0s' {1..200})" gen_file_plain_with_content 10 test-bundle /one "$(printf 'a%.0s' {1..200})"
gen_file_plain_with_content 10 test-bundle /usr/lib/kernel/a "$(printf 'a%.0s' {1..210})"
gen_file_plain_with_content 20 test-bundle /usr/lib/baz "$(seq 100)" gen_file_plain_with_content 20 test-bundle /usr/lib/baz "$(seq 100)"
gen_file_plain_with_content 20 test-bundle /two "$(printf 'a%.0s' {1..200})" gen_file_plain_with_content 20 test-bundle /two "$(printf 'a%.0s' {1..200})"
gen_file_plain_with_content 20 test-bundle /usr/lib/kernel/ab "$(printf 'a%.0s' {1..210})"
# different content just to make sure this works with delta renames as well as # different content just to make sure this works with delta renames as well as
# direct renames # direct renames
gen_file_plain_with_content 30 test-bundle /usr/lib/foo "$(seq 100) new" gen_file_plain_with_content 30 test-bundle /usr/lib/foo "$(seq 100) new"
gen_file_plain_with_content 30 test-bundle /usr/lib/kernel/abc "$(printf 'a%.0s' {1..210})"
gen_file_plain_with_content 40 test-bundle /usr/lib/foo "$(seq 100) new" gen_file_plain_with_content 40 test-bundle /usr/lib/foo "$(seq 100) new"
gen_file_plain_with_content 40 test-bundle /usr/lib/kernel/abc "$(printf 'a%.0s' {1..210})"
# new file to force manifest generation # new file to force manifest generation
gen_file_plain_with_content 40 test-bundle /a "testfile" gen_file_plain_with_content 40 test-bundle /a "testfile"
} }
@@ -68,11 +72,14 @@ setup() {
# version 10: add files to 10 # version 10: add files to 10
[ 1 -eq $(grep $'F\.\.\.\t.*\t10\t/usr/lib/bar' $DIR/www/10/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'F\.\.\.\t.*\t10\t/usr/lib/bar' $DIR/www/10/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.\.\.\t.*\t10\t/one' $DIR/www/10/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'F\.\.\.\t.*\t10\t/one' $DIR/www/10/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.b\.\t.*\t10\t/usr/lib/kernel/a' $DIR/www/10/Manifest.test-bundle | wc -l) ]
# version 20: rename bar to baz and one to two # version 20: rename bar to baz and one to two
[ 1 -eq $(grep $'\.d\.r\t.*\t20\t/one' $DIR/www/20/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'\.d\.r\t.*\t20\t/one' $DIR/www/20/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.\.r\t.*\t20\t/two' $DIR/www/20/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'F\.\.r\t.*\t20\t/two' $DIR/www/20/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'\.d\.r\t.*\t20\t/usr/lib/bar' $DIR/www/20/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'\.d\.r\t.*\t20\t/usr/lib/bar' $DIR/www/20/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.\.r\t.*\t20\t/usr/lib/baz' $DIR/www/20/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'F\.\.r\t.*\t20\t/usr/lib/baz' $DIR/www/20/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'\.gbr\t.*\t20\t/usr/lib/kernel/a' $DIR/www/20/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.br\t.*\t20\t/usr/lib/kernel/ab' $DIR/www/20/Manifest.test-bundle | wc -l) ]
# version 30: original renamed-from file (bar) is now orphaned and therefore # version 30: original renamed-from file (bar) is now orphaned and therefore
# deleted, baz is now a renamed-from file and foo is a renamed-to file. # deleted, baz is now a renamed-from file and foo is a renamed-to file.
# /two was deleted in this version, so both /one and /two should be marked as # /two was deleted in this version, so both /one and /two should be marked as
@@ -82,6 +89,8 @@ setup() {
[ 1 -eq $(grep $'\.d\.\.\t0\{64\}\t20\t/usr/lib/bar' $DIR/www/30/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'\.d\.\.\t0\{64\}\t20\t/usr/lib/bar' $DIR/www/30/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'\.d\.r\t.*\t30\t/usr/lib/baz' $DIR/www/30/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'\.d\.r\t.*\t30\t/usr/lib/baz' $DIR/www/30/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.\.r\t.*\t30\t/usr/lib/foo' $DIR/www/30/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'F\.\.r\t.*\t30\t/usr/lib/foo' $DIR/www/30/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'\.gbr\t.*\t30\t/usr/lib/kernel/ab' $DIR/www/30/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.br\t.*\t30\t/usr/lib/kernel/abc' $DIR/www/30/Manifest.test-bundle | wc -l) ]
# version 40: the existing rename from baz -> foo must persist while all # version 40: the existing rename from baz -> foo must persist while all
# others remain deleted # others remain deleted
@@ -90,6 +99,7 @@ setup() {
[ 1 -eq $(grep $'\.d\.\.\t0\{64\}\t20\t/usr/lib/bar' $DIR/www/40/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'\.d\.\.\t0\{64\}\t20\t/usr/lib/bar' $DIR/www/40/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'\.d\.r\t.*\t30\t/usr/lib/baz' $DIR/www/40/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'\.d\.r\t.*\t30\t/usr/lib/baz' $DIR/www/40/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.\.r\t.*\t30\t/usr/lib/foo' $DIR/www/40/Manifest.test-bundle | wc -l) ] [ 1 -eq $(grep $'F\.\.r\t.*\t30\t/usr/lib/foo' $DIR/www/40/Manifest.test-bundle | wc -l) ]
[ 1 -eq $(grep $'F\.b\.\t.*\t30\t/usr/lib/kernel/abc' $DIR/www/40/Manifest.test-bundle | wc -l) ]
} }
# vi: ft=sh ts=8 sw=2 sts=2 et tw=80 # vi: ft=sh ts=8 sw=2 sts=2 et tw=80
+13 -13
View File
@@ -47,7 +47,7 @@ gendataCs() {
} }
checkrenamed(){ checkrenamed(){
local flags sh1 ver name fromsha1="bad" tosha1 local flags sha1 ver name fromsha1="bad" tosha1
# Check that $1 is renamed to $2 # Check that $1 is renamed to $2
exec 9< $DIR/www/20/Manifest.test-bundle exec 9< $DIR/www/20/Manifest.test-bundle
# skip the header # skip the header
@@ -58,11 +58,11 @@ checkrenamed(){
while read -r -u9 flags sha1 ver name while read -r -u9 flags sha1 ver name
do do
case "$flags" in case "$flags" in
(?"dr"?) [ "$name" = "$1" ] && fromsha1=$sha1 ;; (?"d.r") [ "$name" = "$1" ] && fromsha1=$sha1 ;;
(?".r"?) [ "$name" = "$2" ] && tosha1=$sha1 ;; (?"..r") [ "$name" = "$2" ] && tosha1=$sha1 ;;
esac esac
done done
if [ "$fromsh1" = "$tosha1" ] ; then return 0 ; else return 1 ; fi if [ "$fromsha1" = "$tosha1" ] ; then return 0 ; else return 1 ; fi
} }
# Guts of doing an update # Guts of doing an update
@@ -87,7 +87,7 @@ do_an_update() {
gendataA 10 foo gendataA 10 foo
gendataA 20 bar gendataA 20 bar
do_an_update do_an_update
checkrenamed foo bar checkrenamed /foo /bar
} }
@test "ignore rename detection for small files" { @test "ignore rename detection for small files" {
@@ -142,8 +142,8 @@ do_an_update() {
gendataA 20 bar gendataA 20 bar
gendataA 20 baz gendataA 20 baz
do_an_update do_an_update
checkrenamed foo bar checkrenamed /foo /bar
checkrenamed foz baz checkrenamed /foz /baz
} }
@test "rename two files to two, one slightly different" { @test "rename two files to two, one slightly different" {
@@ -153,8 +153,8 @@ do_an_update() {
gendataB 20 baz gendataB 20 baz
do_an_update do_an_update
# we don't actually know how the client we do this rename, but don't care # we don't actually know how the client we do this rename, but don't care
checkrenamed foo bar checkrenamed /foo /bar
checkrenamed foz baz checkrenamed /foz /baz
} }
@test "rename two files to two, each pair slightly different" { @test "rename two files to two, each pair slightly different" {
@@ -163,8 +163,8 @@ do_an_update() {
gendataA 20 bar gendataA 20 bar
gendataB 20 baz gendataB 20 baz
do_an_update do_an_update
checkrenamed foo bar checkrenamed /foo /bar
checkrenamed foz baz checkrenamed /foz /baz
} }
@test "rename two files to two, one very different" { @test "rename two files to two, one very different" {
@@ -183,9 +183,9 @@ do_an_update() {
gendataA 20 bar gendataA 20 bar
gendataCs 20 baz gendataCs 20 baz
do_an_update do_an_update
run checkrenamed foo bar run checkrenamed /foo /bar
if [ $status -eq 1 ] ; then if [ $status -eq 1 ] ; then
checkrenamed foz bar checkrenamed /foz /bar
fi fi
} }