Re: problem with git-pull

From: Tatsuki Makino <>
Date: Wed, 13 Sep 2023 23:32:55 UTC

I think this is a very difficult problem for people like me who are just maintainers and do not have the right to commit.
How are you all solving this? :)

I have 3 clone repositories.
1. shallow clone created automatically by root using poudriere ports -c -m git+https.
2. full clone created by root using git clone.
3. shallow clone created by user-tatsuki using git clone.

And, the result of poudriere ports -l is in the following state.
# poudriere ports -l
default   portsnap  2023-09-13 20:49:40 /usr/local/poudriere/ports/default
git       git+https 2023-09-13 20:49:43 /usr/local/poudriere/ports/git <- this is 1.
null      null      2023-08-09 00:00:31 /home/git/FreeBSD/ports/main   <- this is 2.
svn       svn+https 2023-08-09 00:04:46 /usr/local/poudriere/ports/svn

The directory of poudriere packages is tricked out.
Below is an excerpt of the ls results.

> ls -l /usr/local/poudriere/data/packages/
total 20
drwxr-xr-x  3 root  wheel  512 Sep 14 05:51 src-default
lrwxr-xr-x  1 root  wheel   11 Apr  7  2021 src-git -> src-default
lrwxr-xr-x  1 root  wheel   11 Apr 25  2021 src-null -> src-default
lrwxr-xr-x  1 root  wheel   11 Apr  3  2019 src-svn -> src-default

This keeps the packages in one place no matter which porttree is used.
If the porttrees are from the same period, package rebuilding is unlikely to occur.
However, if poudriere bulk -j src -p default and poudriere bulk -j src -p git are run at the same time, they will fail.

And so, back to the main topic :)
For example, I now need to update print/epson-inkjet-printer-escpr{,2} :)
In such a case, first synchronize 3. to the HEAD of origin.
Editing print/epson-inkjet-printer-escpr in the repository in 3. to make it newer than the head of origin.
Then, copy the changes in 3. to 1. using rm -r /pathto1./print/epson-inkjet-printer-escpr and cp -R /pathto3./print/epson-inkjet-printer-escpr /pathto1./print/ .
Test build without updating poudriere porttree. poudriere bulk -t -j src -p git print/epson-inkjet-printer-escpr
The default porttree is used for undo. poudriere bulk -j src print/epson-inkjet-printer-escpr
The git repository in poudriere will not be modified in any funny way, so it will be easily reverted by restore, reset or clean.

Simply put, the updated parts in the new tree are imported into the old tree :)

A full clone of 2. is used to create an older version of a package, for example, seamonkey-2.49.4_27 :)
This email is also written by seamonkey-2.49.4_27, but the build process for it is the opposite of the direction of this issue, so I will omit it :)

I hope that from this we can generate hints for solutions and ideas for making things easier :)