FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > ArchLinux > ArchLinux Pacman Development

 
 
LinkBack Thread Tools
 
Old 02-27-2009, 11:44 AM
Xavier
 
Default repo-add: fail early if repo can not be created

On Fri, Feb 27, 2009 at 1:56 AM, Allan McRae <allan@archlinux.org> wrote:
> Xavier Chantry wrote:
>>
>> Before this commit, the repo creation could fail after all packages have
>> been added to the database. Now this will be detected before adding
>> anything.
>>
>> Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
>>
>
> Patch looks good. *Minor stylistic comments below
>
>> ---
>> *scripts/repo-add.sh.in | * 18 +++++++++++++++---
>> *1 files changed, 15 insertions(+), 3 deletions(-)
>>
>> diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
>> index b12188c..a967506 100644
>> --- a/scripts/repo-add.sh.in
>> +++ b/scripts/repo-add.sh.in
>> @@ -326,9 +326,21 @@ for arg in "$@"; do
>> * * * * * * * * * * * *fi
>> * * * * * * * * * * * *msg "$(gettext "Extracting database to a temporary
>> location...")"
>> * * * * * * * * * * * *bsdtar -xf "$REPO_DB_FILE" -C "$gstmpdir"
>> - * * * * * * * elif [ "$cmd" == "repo-remove" ]; then
>> - * * * * * * * * * * * error "$(gettext "Repository file '%s' was not
>> found.")" "$REPO_DB_FILE"
>> - * * * * * * * * * * * exit 1
>> + * * * * * * * else
>> + * * * * * * * * * * * case "$cmd" in
>> + * * * * * * * * * * * * * * * repo-remove)
>>
>
> indent the lines within this block some more:
>>
>> + * * * * * * * * * * * * * * * error "$(gettext "Repository file '%s' was
>> not found.")" "$REPO_DB_FILE"
>> + * * * * * * * * * * * * * * * exit 1
>> + * * * * * * * * * * * * * * * ;;
>> + * * * * * * * * * * * * * * * repo-add)
>>
>
> and these
>>
>> + * * * * * * * * * * * * * * * # check if the file can be created (write
>> permission, directory existence, etc)
>> + * * * * * * * * * * * * * * * if ! touch "$REPO_DB_FILE"; then
>> + * * * * * * * * * * * * * * * * * * * error "$(gettext "Repository file
>> '%s' could not be created.")" "$REPO_DB_FILE"
>> + * * * * * * * * * * * * * * * * * * * exit 1
>> + * * * * * * * * * * * * * * * fi
>> + * * * * * * * * * * * * * * * rm -f "$REPO_DB_FILE"
>> + * * * * * * * * * * * * * * * ;;
>> + * * * * * * * * * * * esac
>> * * * * * * * *fi
>> * * * *else
>> * * * * * * * *if [ "$cmd" == "repo-add" ]; then
>>
>

Yeah, I don't know why vim indent the blocks inside case like that...
It is quite annoying. Is there a way to write case blocks more vim
friendly, or some options / tricks I could use?
_______________________________________________
pacman-dev mailing list
pacman-dev@archlinux.org
http://www.archlinux.org/mailman/listinfo/pacman-dev
 
Old 02-28-2009, 08:37 PM
Dan McGee
 
Default repo-add: fail early if repo can not be created

On Thu, Feb 26, 2009 at 2:06 PM, Xavier Chantry <shiningxc@gmail.com> wrote:
> Before this commit, the repo creation could fail after all packages have
> been added to the database. Now this will be detected before adding
> anything.
>
> Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
> ---
> *scripts/repo-add.sh.in | * 18 +++++++++++++++---
> *1 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
> index b12188c..a967506 100644
> --- a/scripts/repo-add.sh.in
> +++ b/scripts/repo-add.sh.in
> @@ -326,9 +326,21 @@ for arg in "$@"; do
> * * * * * * * * * * * *fi
> * * * * * * * * * * * *msg "$(gettext "Extracting database to a temporary location...")"
> * * * * * * * * * * * *bsdtar -xf "$REPO_DB_FILE" -C "$gstmpdir"
> - * * * * * * * elif [ "$cmd" == "repo-remove" ]; then
> - * * * * * * * * * * * error "$(gettext "Repository file '%s' was not found.")" "$REPO_DB_FILE"
> - * * * * * * * * * * * exit 1
> + * * * * * * * else
> + * * * * * * * * * * * case "$cmd" in
> + * * * * * * * * * * * * * * * repo-remove)
> + * * * * * * * * * * * * * * * error "$(gettext "Repository file '%s' was not found.")" "$REPO_DB_FILE"
> + * * * * * * * * * * * * * * * exit 1
> + * * * * * * * * * * * * * * * ;;
> + * * * * * * * * * * * * * * * repo-add)
> + * * * * * * * * * * * * * * * # check if the file can be created (write permission, directory existence, etc)
> + * * * * * * * * * * * * * * * if ! touch "$REPO_DB_FILE"; then
> + * * * * * * * * * * * * * * * * * * * error "$(gettext "Repository file '%s' could not be created.")" "$REPO_DB_FILE"
> + * * * * * * * * * * * * * * * * * * * exit 1
> + * * * * * * * * * * * * * * * fi
> + * * * * * * * * * * * * * * * rm -f "$REPO_DB_FILE"
This seems scary to me- is there any reason to blow it away like this?
It also makes the repo-add process non-atomic- someone could access
the database and fail while you are adding 10 packages, correct?

> + * * * * * * * * * * * * * * * ;;
> + * * * * * * * * * * * esac
> * * * * * * * *fi
> * * * *else
> * * * * * * * *if [ "$cmd" == "repo-add" ]; then
> --
> 1.6.1.3

Also agree with Allan's style comments, and I am not sure why vim
indents like it does.

-Dan
_______________________________________________
pacman-dev mailing list
pacman-dev@archlinux.org
http://www.archlinux.org/mailman/listinfo/pacman-dev
 
Old 03-01-2009, 09:49 AM
Xavier
 
Default repo-add: fail early if repo can not be created

On Sun, Mar 1, 2009 at 6:57 AM, Allan McRae <allan@archlinux.org> wrote:
>
> I thought about this too but I was less scared when I noticed that this is
> only done when the db file is not found. *So you are only removing the db
> file created in the touch statement.
>

Indeed. However when the db file is found, I didn't even check it was
also writable in that case.
And we have a race condition huge like a mountain here. There can be
several minutes spent between this write/creation check is made, and
the actual write of the new database.
It would probably be a good idea to write a lock file for each
database ($REPO.lck) so that there is never more than one repo-add
instance running for one given db.

For these reasons, I will just drop that patch for now, for rewriting it later.
_______________________________________________
pacman-dev mailing list
pacman-dev@archlinux.org
http://www.archlinux.org/mailman/listinfo/pacman-dev
 
Old 03-01-2009, 10:33 AM
Xavier
 
Default repo-add: fail early if repo can not be created

On Sat, Feb 28, 2009 at 10:37 PM, Dan McGee <dpmcgee@gmail.com> wrote:
>
> Also agree with Allan's style comments, and I am not sure why vim
> indents like it does.
>

I guess vim considers case blocks just like any other blocks :
" Add a 'shiftwidth' after if, while, else, case, until, for, function()

So it indents all the lines inside a case/esac at the same level.
And it apparently does not consider case statements as blocks.

That indentation is made even worse by the fact that I didn't even put
a newline between the different case statements, so it is even harder
to see them.
Anyway my updated patches have manual indentation now.
_______________________________________________
pacman-dev mailing list
pacman-dev@archlinux.org
http://www.archlinux.org/mailman/listinfo/pacman-dev
 

Thread Tools




All times are GMT. The time now is 11:25 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org