I run `eix-sync` and noticed that I get " * Last emerge --sync was 59d 12h 2m 26s ago." which I found strange as I knew for a fact I had updated my checkout. I `strace`d emerge to find `/usr/portage/metadata/timestamp.x` is not updated on `eix-sync`. Here's a reproduction of the behaviour. ########################################################### root@localhost:~# cat /usr/portage/metadata/timestamp.x 1634258101 Fri 15 Oct 2021 12:35:01 AM UTC root@localhost:~# eix-sync * Running emerge --sync >>> Syncing repository 'gentoo' into '/usr/portage'... /usr/bin/git fetch origin Already up to date. === Sync completed for gentoo * Updating DTDs ... [ ok ] * Updating GLSAs ... [ ok ] * Updating news items ... [ ok ] * Updating projects.xml ... [ ok ] >>> Syncing repository 'localrepo' into '/var/db/repos/localrepo'... /usr/bin/git fetch origin Already up to date. === Sync completed for localrepo Action: sync for repo: gentoo, returned code = 0 Action: sync for repo: localrepo, returned code = 0 * Main gentoo tree does not appear to have changed: exiting * Use -a or set have_changed=: in a ! hook to override this check * Time statistics: 3 seconds for syncing 3 seconds total root@localhost:~# cat /usr/portage/metadata/timestamp.x 1634258101 Fri 15 Oct 2021 12:35:01 AM UTC root@localhost:~# emerge portage -1 -pv * Last emerge --sync was 59d 12h 2m 26s ago. These are the packages that would be merged, in order: Calculating dependencies... done! [binary R ] sys-apps/portage-3.0.28-r1-1::gentoo USE="(ipc) native-extensions rsync-verify (xattr) -apidoc -build -doc -gentoo-dev (-selinux) -test" PYTHON_TARGETS="python3_8 python3_9 (-pypy3) (-python3_10)" 0 KiB Total: 1 package (1 reinstall, 1 binary), Size of downloads: 0 KiB ########################################################### I posted the output of an `eix-sync` run after I had previously run it that same day (also to reduce the size of what I post here). Ideally `eix-sync` would also update the timestamp once it finishes so `emerge` doesn't complain that the repo hasn't been updated when it has been, in fact, updated.
Not related with eix. Whichever tool/script/hooks you use to sync the main portage tree is responsible for this. This is not a task for the eix-sync script. If you want, you can write a manual hook for eix-sync, but I would not recommend it.
The sync is done over git from https://github.com/gentoo-mirror/gentoo.git (`eix-sync` calls `emerge --sync`). To alleviate any concerns about `eix-sync` I ran `emerge --sync` directly and got the same result. ############################################################### # emerge --sync >>> Syncing repository 'gentoo' into '/usr/portage'... /usr/bin/git fetch origin remote: Enumerating objects: 14, done. remote: Counting objects: 100% (14/14), done. remote: Compressing objects: 100% (4/4), done. remote: Total 14 (delta 9), reused 14 (delta 9), pack-reused 0 Unpacking objects: 100% (14/14), 3.04 KiB | 29.00 KiB/s, done. From https://github.com/gentoo-mirror/gentoo 0e77efef07bb..c1a26281fe2e stable -> origin/stable 0e77efef07bb..c1a26281fe2e master -> origin/master Updating 0e77efef07bb..c1a26281fe2e Fast-forward dev-ada/libadalang/libadalang-22.0.0.ebuild | 4 +++- metadata/md5-cache/dev-ada/libadalang-22.0.0 | 6 +++--- metadata/timestamp.chk | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) === Sync completed for gentoo * Updating DTDs ... [ ok ] * Updating GLSAs ... [ ok ] * Updating news items ... [ ok ] * Updating projects.xml ... [ ok ] ############################################################### In the git checkout there's a `timestamp.chk` which gets updated on `emerge --sync` but `timestamp.x` is the file that `emerge` is looking for (based on the `strace`) for last updated timestamp. I've updated to `sys-apps/portage-3.0.28-r1-1::gentoo` and I still have the same behaviour. ############################################################### # emerge portage -1 -pv * Last emerge --sync was 68d 20h 57m 17s ago. ############################################################### This is the layout of the metadata dir. ############################################################### # ls -lash /usr/portage/metadata/ total 2.6M 0 drwxr-xr-x 9 portage portage 333 Dec 22 21:30 . 12K drwxr-xr-x 179 portage portage 8.0K Dec 22 20:44 .. 4.0K -rw-r--r-- 1 portage portage 237 Jan 28 2021 .gitignore 4.0K -rw-r--r-- 1 portage portage 896 Feb 2 2019 AUTHORS 4.0K -rw-r--r-- 1 portage portage 3.5K Oct 15 00:39 Manifest.gz 0 drwxr-xr-x 2 portage portage 189 Oct 15 00:39 dtd 948K drwxr-xr-x 2 portage portage 916K Oct 15 00:39 glsa 0 drwxr-xr-x 2 portage portage 196 Oct 15 00:39 install-qa-check.d 4.0K -rw-r--r-- 1 portage portage 2.3K Oct 21 15:08 layout.conf 12K drwxr-xr-x 171 portage portage 8.0K Dec 22 20:44 md5-cache 12K drwxr-xr-x 83 portage portage 8.0K Nov 28 22:07 news 1.5M -rw-r--r-- 1 portage portage 1.5M Dec 22 20:44 pkg_desc_index 124K -rw-r--r-- 1 portage portage 121K Dec 22 20:44 projects.xml 4.0K -rw-r--r-- 1 portage portage 2.3K Aug 8 23:39 qa-policy.conf 0 drwxr-xr-x 2 portage portage 72 Oct 15 00:39 repoman 4.0K -rw-r--r-- 1 portage portage 32 Oct 15 00:39 timestamp 4.0K -rw-r--r-- 1 portage portage 32 Dec 22 21:23 timestamp.chk 4.0K -rw-r--r-- 1 portage portage 78 Oct 15 00:39 timestamp.commit 4.0K -rw-r--r-- 1 portage portage 43 Oct 15 00:39 timestamp.x 0 drwxr-xr-x 2 portage portage 150 Oct 15 00:39 xml-schema ############################################################### Also in the gentoo mirror only the timestamp.chk is present https://github.com/gentoo-mirror/gentoo/tree/stable/metadata - perhaps there was a change in what got sync'ed into that repo that caused this? Let me know if there's anything else I can try.
After some more digging through the code I found that for both webrsync https://github.com/gentoo/portage/blob/8851a437c7edc7ae01ba04dbff42b27e1f36b37b/bin/emerge-webrsync#L147 and delta-webrsync https://github.com/gentoo/portage/blob/8851a437c7edc7ae01ba04dbff42b27e1f36b37b/misc/emerge-delta-webrsync#L228 if the timestamp is not present it defaults to 0 regardless of when the last sync was done, which is most likely an error. This is also referenced in https://github.com/gentoo/portage/blob/master/lib/portage/sync/old_tree_timestamp.py#L62 which gives the "Last emerge --sync was" message, but only if the file is present. `old_tree_timestamp()` is also used in https://github.com/gentoo/portage/blob/0e9e12aadb889766d61c0561b9723e71542d43e6/lib/_emerge/actions.py#L128-L129 but in this case the missing `timestamp.x` file would not have a default value (like webrsync and delta-webrsync). It seems `timestamp.chk` https://github.com/gentoo/portage/blob/8851a437c7edc7ae01ba04dbff42b27e1f36b37b/bin/egencache#L1171-L1172 is used for `rsync` but does not have the same format as `timestamp.x`. Desired workflow update: `emerge --sync` should update `timestamp.x` on each successful run.