pmbootstrap/pmb
Oliver Smith 33a09ea1c7
Fix dependency resolver being stuck after reboot (#1359)
When the native arch (e.g. `x86_64`) `APKINDEX` files are outdated, and
`pmbootstrap` gets instructed to build a linux package for a foreign
arch, then the `APKINDEX` cache did not get used anymore for the
current session. This means that every lookup of a package in an
`APKINDEX` caused the whole `APKINDEX` file to get parsed again instead
of using the cached version. This slowed it down so much that it felt
like `pmbootstrap` was looping forever.

How this happens in detail:
* Whenever pmbootstrap parses an `APKINDEX`, it fills up the
  `args.cache["apkindex"]` dict with the parsed information and the
  last modified date of the file.
* `pmbootstrap` checks the last modified date of the `APKINDEX` files
  and updates them if they are older than 4 hours.
* When the bug appeared, then the cache was already filled up, then an
  update happened and then `pmbootstrap` tried to read from the cache.
* So when reading from the `APKINDEX`, the cache gets ignored because
  the last modified date is different.
* Up to this commit, the cache does not get deleted and filled up
  again!

How to test:
Try these commands once without this commit, and then with this commit
applied:
```
$ sudo touch -m -t 201801010000 \
    ~/.local/var/pmbootstrap/cache_apk_x86_64/APKINDEX.*
$ pmbootstrap -v build linux-postmarketos-mainline --arch=armhf
```

Without the patch, you can see in `pmbootstrap log` that it is
resolving the dependencies properly, but very slowly. With the patch
the resolving happens almost instantly.
2018-03-24 16:31:31 +00:00
..
aportgen Fix aportgen without initializing buildenv 2018-03-12 17:17:32 +01:00
build pmbootstrap newapkbuild: Properly parse arguments (#1320) 2018-03-15 21:42:34 +00:00
chroot aportgen: Gracefully handle old aports_upstream (#1291) 2018-03-11 14:18:21 +00:00
config pmbootstrap init: Ask for hostname, default: device name (#1327) 2018-03-17 18:41:41 +00:00
export Use default partitions in odin export if not specified in deviceinfo (#1271) 2018-02-28 01:28:36 +00:00
flasher Happy new year! (update copyright to 2018) 2018-01-04 04:53:35 +01:00
helpers pmbootstrap init: Ask for hostname, default: device name (#1327) 2018-03-17 18:41:41 +00:00
install pmbootstrap init: Ask for hostname, default: device name (#1327) 2018-03-17 18:41:41 +00:00
parse Fix dependency resolver being stuck after reboot (#1359) 2018-03-24 16:31:31 +00:00
qemu qemu: allow the user to specify the kernel flavor (#1256) 2018-02-25 19:20:22 +00:00
__init__.py pmbootstrap: Disallow running as root (#1120) 2018-01-14 08:13:35 +00:00