| Message ID | 20241116172900.897898-1-srinuvasan.a@siemens.com |
|---|---|
| State | Superseded, archived |
| Headers | show |
| Series | classes/repository: use the proper filename to find the packages under repo | expand |
Hello Srinu,
I have a different implementation of this function that I was going to
submit after doing some clean-up and running a full CI build
Here's anyhow what it looks like:
# lookup ${file} in the database for the current suite
package=$(reprepro -b ${dir} --dbdir ${dbdir} \
--list-format 'Filename\n' \
listfilter ${distro} \
'Filename (% /'${file##*/}')' | head -n 1)
if [ -n "$package" ]; then
# yes
cmp --silent "$package" "$file" && return 0
# yes but not the exact same file
return 1
fi
# no
return 2
I would suggest you come up with a more concise description of your
change and ideally some way to reproduce and exhibit the problem as I
am not sure I follow your problem statement
On Sat, 2024-11-16 at 22:58 +0530, srinuvasan.a@siemens.com wrote:
> From: srinuvasan <srinuvasan.a@siemens.com>
>
> The very first time when we generate the base-apt the REPO_BASE_DIR
> is empty, it doesn't contain any packages, hence
> repo_contains_package
> function returns 2, based on the return value (2), we are adding all
> the
> packages to the empty repo by calling the repo_add_packages function.
>
> After clearing the temporary and cache files, when we retrigger the
> base-apt
> we should skip the repo_add_packages function for all the packages
> (assume that
> repo packages are not contaminated), but we observed
> repo_contains_function
> says some of the packages not available in the existing repo, but
> really those
> packages available in the repo.
>
> Here the issue is, reprepro caching all the packages by skipping the
> epoch version if any packages have, and all the packages contain only
> the
> <upstream_version>-<debian_version>.
>
> But in the download folder , few packages contain the epoch version,
> f.e: automake, git-man, ssh, now we try to find the packages with
> epoch version in APT repo, but APT repos skip the epoch version
> during repo generation.
>
> With that wrong finding again we are calling the repo_add_package
> function for few packages, even those packages already available in
> the repo.
>
> Skip the epoch version during finding the packages in the repo, with
> that we can eliminate
> unnecessarily adding the packages to repo.
>
> Signed-off-by: srinuvasan <srinuvasan.a@siemens.com>
> ---
> meta/classes/repository.bbclass | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/meta/classes/repository.bbclass
> b/meta/classes/repository.bbclass
> index 28e712fd..7379658d 100644
> --- a/meta/classes/repository.bbclass
> +++ b/meta/classes/repository.bbclass
> @@ -99,7 +99,8 @@ repo_contains_package() {
> local file="$2"
> local package
>
> - package=$(find ${dir} -name ${file##*/})
> + file_name=$(echo "${file##*/}" | sed 's/[0-9]%3a//g')
> + package=$(find ${dir} -name ${file_name})
> if [ -n "$package" ]; then
> # yes
> cmp --silent "$package" "$file" && return 0
On Sat, 2024-11-16 at 22:58 +0530, srinuvasan.a@siemens.com wrote: > From: srinuvasan <srinuvasan.a@siemens.com> > > The very first time when we generate the base-apt the REPO_BASE_DIR > is empty, it doesn't contain any packages, hence > repo_contains_package > function returns 2, based on the return value (2), we are adding all > the > packages to the empty repo by calling the repo_add_packages function. > > After clearing the temporary and cache files, when we retrigger the > base-apt > we should skip the repo_add_packages function for all the packages > (assume that > repo packages are not contaminated), but we observed > repo_contains_function > says some of the packages not available in the existing repo, but > really those > packages available in the repo. > > Here the issue is, reprepro caching all the packages by skipping the > epoch version if any packages have, and all the packages contain only > the > <upstream_version>-<debian_version>. > > But in the download folder , few packages contain the epoch version, > f.e: automake, git-man, ssh, now we try to find the packages with > epoch version in APT repo, but APT repos skip the epoch version > during repo generation. As I was not fully understanding the problem, I checked the packages you listed and now it is much clearer: $ find build/base-apt/local/ build/base-apt/downloads/ -name git-man\* build/base-apt/local/apt/debian/pool/main/g/git/git-man_2.39.5- 0+deb12u1_all.deb build/base-apt/downloads/deb/debian-bookworm/git-man_1%3a2.39.5- 0+deb12u1_all.deb Could you reword your commit message to be more concise? > > With that wrong finding again we are calling the repo_add_package > function for few packages, even those packages already available in > the repo. > > Skip the epoch version during finding the packages in the repo, with > that we can eliminate > unnecessarily adding the packages to repo. > > Signed-off-by: srinuvasan <srinuvasan.a@siemens.com> > --- > meta/classes/repository.bbclass | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/meta/classes/repository.bbclass > b/meta/classes/repository.bbclass > index 28e712fd..7379658d 100644 > --- a/meta/classes/repository.bbclass > +++ b/meta/classes/repository.bbclass > @@ -99,7 +99,8 @@ repo_contains_package() { > local file="$2" > local package > > - package=$(find ${dir} -name ${file##*/}) > + file_name=$(echo "${file##*/}" | sed 's/[0-9]%3a//g') > + package=$(find ${dir} -name ${file_name}) > if [ -n "$package" ]; then > # yes > cmp --silent "$package" "$file" && return 0
Thanks cedric for the review, I will refactor the commit message even more concise. Many thanks, Srinu -----Original Message----- From: Hombourger, Cedric (FT FDS CES LX) <cedric.hombourger@siemens.com> Sent: 17 November 2024 05:24 To: isar-users@googlegroups.com; Arjunan, Srinu (FT FDS CES LX PBU 2) <srinuvasan.a@siemens.com> Cc: Kiszka, Jan (FT RPD CED) <jan.kiszka@siemens.com> Subject: Re: [PATCH] classes/repository: use the proper filename to find the packages under repo On Sat, 2024-11-16 at 22:58 +0530, srinuvasan.a@siemens.com wrote: > From: srinuvasan <srinuvasan.a@siemens.com> > > The very first time when we generate the base-apt the REPO_BASE_DIR is > empty, it doesn't contain any packages, hence repo_contains_package > function returns 2, based on the return value (2), we are adding all > the packages to the empty repo by calling the repo_add_packages > function. > > After clearing the temporary and cache files, when we retrigger the > base-apt we should skip the repo_add_packages function for all the > packages (assume that repo packages are not contaminated), but we > observed repo_contains_function says some of the packages not > available in the existing repo, but really those packages available in > the repo. > > Here the issue is, reprepro caching all the packages by skipping the > epoch version if any packages have, and all the packages contain only > the <upstream_version>-<debian_version>. > > But in the download folder , few packages contain the epoch version, > f.e: automake, git-man, ssh, now we try to find the packages with > epoch version in APT repo, but APT repos skip the epoch version during > repo generation. As I was not fully understanding the problem, I checked the packages you listed and now it is much clearer: $ find build/base-apt/local/ build/base-apt/downloads/ -name git-man\* build/base-apt/local/apt/debian/pool/main/g/git/git-man_2.39.5- 0+deb12u1_all.deb build/base-apt/downloads/deb/debian-bookworm/git-man_1%3a2.39.5- 0+deb12u1_all.deb Could you reword your commit message to be more concise? > > With that wrong finding again we are calling the repo_add_package > function for few packages, even those packages already available in > the repo. > > Skip the epoch version during finding the packages in the repo, with > that we can eliminate unnecessarily adding the packages to repo. > > Signed-off-by: srinuvasan <srinuvasan.a@siemens.com> > --- > meta/classes/repository.bbclass | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/meta/classes/repository.bbclass > b/meta/classes/repository.bbclass index 28e712fd..7379658d 100644 > --- a/meta/classes/repository.bbclass > +++ b/meta/classes/repository.bbclass > @@ -99,7 +99,8 @@ repo_contains_package() { > local file="$2" > local package > > - package=$(find ${dir} -name ${file##*/}) > + file_name=$(echo "${file##*/}" | sed 's/[0-9]%3a//g') > + package=$(find ${dir} -name ${file_name}) > if [ -n "$package" ]; then > # yes > cmp --silent "$package" "$file" && return 0 -- Cedric Hombourger Siemens AG www.siemens.com
diff --git a/meta/classes/repository.bbclass b/meta/classes/repository.bbclass index 28e712fd..7379658d 100644 --- a/meta/classes/repository.bbclass +++ b/meta/classes/repository.bbclass @@ -99,7 +99,8 @@ repo_contains_package() { local file="$2" local package - package=$(find ${dir} -name ${file##*/}) + file_name=$(echo "${file##*/}" | sed 's/[0-9]%3a//g') + package=$(find ${dir} -name ${file_name}) if [ -n "$package" ]; then # yes cmp --silent "$package" "$file" && return 0