On 2026/06/30 18:02, Jeremie Courreges-Anglas wrote:
> 
> I import all my new ports with portimport(1), from /usr/ports/mystuff.
> I feel like it's always been the preferred way to run it, and using
> mystuff should be the preferred way to handle *new* ports in general
> (not so much for updates).  Sadly when run from mystuff without
> specifying -p it has always suffered from an annoying error message
> when, right after import, the script tries to cd
> $portsdir/pkgpath-blah and run cvs update:
> 
>   cvs server: failed to create lock directory for `/cvs' (/cvs/#cvs.lock): 
> Permission denied
>   cvs server: failed to obtain dir lock in repository `/cvs'
>   cvs [server aborted]: read lock failed - giving up
> 
> The problem is that $portsdir here is computed from $PWD and thus
> includes mystuff.  The error message is just super unhelpful.
> 
> Fixing this for the common case is easy: use /usr/ports base directory
> for running cvs update after import.  People who use a different
> PORTSDIR can specify -p.  I don't understand how the current
> portimport(1) would avoid puking errors with non-default PORTSDIR
> anyway.
> 
> Test run using an already imported directory.  I just tweaked the
> patched portimport to use cvs -n.
> 
>   ritchie /usr/ports/mystuff/devel/libigloo$ ls /usr/ports/devel/libigloo
>   ls: /usr/ports/devel/libigloo: No such file or directory
>   ritchie /usr/ports/mystuff/devel/libigloo$ diff -u 
> /usr/ports/infrastructure/bin/portimport /tmp/portimport
>   --- /usr/ports/infrastructure/bin/portimport        Tue Jun 30 17:26:34 2026
>   +++ /tmp/portimport Tue Jun 30 17:51:43 2026
>   @@ -67,7 +67,7 @@
>   
>    read ans?'Does this look correct? [y/n] '
>    if [[ $ans == +(y|Y) ]]; then
>   -   cvs -d$cvsroot import ports/$pkgpath $user ${user}_$timestamp
>   +   cvs -n -d$cvsroot import ports/$pkgpath $user ${user}_$timestamp
>       grep -q "^@new" pkg/P* && echo "New users/groups, remember to commit 
> infrastructure/db/user.list!"
>       cd "$portsdir/${pkgpath%/*}"
>       cvs -d$cvsroot update -AdP ${pkgpath##*/}
>   ritchie /usr/ports/mystuff/devel/libigloo$ /tmp/portimport
>   Package(s) would be named: libigloo-0.9.5
>   Import would go into: ports/devel/libigloo
>   Does this look correct? [y/n] y
>   U ports/devel/libigloo/Makefile
>   U ports/devel/libigloo/distinfo
>   U ports/devel/libigloo/pkg/PLIST
>   U ports/devel/libigloo/pkg/DESCR
>   
>   No conflicts created by this import
>   
>   U libigloo/Makefile
>   U libigloo/distinfo
>   U libigloo/pkg/DESCR
>   U libigloo/pkg/PLIST
>   Don't forget to commit the devel/Makefile when you're done!
>   /usr/ports/devel
>   ritchie /usr/ports/mystuff/devel/libigloo$ ls /usr/ports/devel/libigloo
>   CVS/      Makefile  distinfo  pkg/
>   ritchie /usr/ports/mystuff/devel/libigloo$
> 
> While here, I can't see how rev 1.8 (use of cvs -R) fixed anything so
> let's just revert that.  The diff for the portimport(1) manpage is
> trivial and not included here.
> 
> ok?
> 
> 
> Index: portimport
> ===================================================================
> RCS file: /cvs/ports/infrastructure/bin/portimport,v
> diff -u -p -r1.10 portimport
> --- portimport        19 Feb 2020 17:53:18 -0000      1.10
> +++ portimport        30 Jun 2026 15:26:34 -0000
> @@ -29,7 +29,7 @@ usage() {
>  }
>  
>  user=$(id -un)
> -portsdir=
> +portsdir=/usr/ports
...
> -portsdir=${portsdir:-${PWD%"/$pkgpath"}}

how about this?

portsdir=${portsdir:-/usr/ports}

>       grep -q "^@new" pkg/P* && echo "New users/groups, remember to commit 
> infrastructure/db/user.list!"
>       cd "$portsdir/${pkgpath%/*}"
> -     cvs -R -d$cvsroot update -AdP ${pkgpath##*/}
> +     cvs -d$cvsroot update -AdP ${pkgpath##*/}

agreed, -R makes no sense here.

I suppose it could mv ${pkgpath} ${pkgpath}.bak or similar if run from
/usr/ports?


Reply via email to