I've got a situation where I need to build a set of static copies of Android source code of different release versions.
Simply doing an repo init -b $version; repo sync
will take forever (init
requires interaction, and the syncs will be wasteful of my bandwidth across versions).
My current setup is to download one base version (say 1.6_r1), copy it to a new folder (android-1.6_r2) and then rerun init
and sync (repo init -b android-1.6_r2; repo sync
). The sync fails sometimes though, with errors like:
ndk/build/platforms/android-3/arch-arm/usr/incl
Aborting
Syncing work tree: 100% (153/153), done.error: development/: platform/development checkout caf83cb2b0ffde1a4cfb7cb258cbe012e283d9e1 Repo sync returned FAIL on android-2.1_r2.1s
I've found some posts with similar errors that indicate this might be caused by repo being out of sync with "changed" files in the filesystem, but I'm wondering if my errors are caused by changing versions under repo's nose.
Is this the right way to go about changing repository versions? More generally, is there a time/bandwidth efficient way to turn an android-1.6_r1
repository into an android-1.6_r2
?
(UPDATE: my initial answer imply that we can incrementally init a new repo from a previous one, for example 1.6_r1 to 1.6_r2, but the correct setup should have been having one local "main mirror" repo where we can point the reference to when starting a new init. I have modified the text below to avoid the incorrect implication.)
Instead of copying, try adding --reference=/path/to/main/repo
to your repo init
command on the new directory.
For example, if you already have a repo in /repos/aosp-main
directory downloaded earlier (and synced to googlesource.com), you can do:
$ mkdir /repos/aosp-1.6_r1
$ cd /repos/aosp-1.6_r1
$ repo init -b android-1.6_r1 -u https://android.googlesource.com/platform/manifest --reference=/repos/aosp-main
$ repo sync
And then, if you want a different version:
$ mkdir /repos/aosp-1.6_r2
$ cd /repos/aosp-1.6_r2
$ repo init -b android-1.6_r2 -u https://android.googlesource.com/platform/manifest --reference=/repos/aosp-main
$ repo sync
This way, we only need to sync to the googlesource.com address when there is new stuff we haven't downloaded yet and it should just use the already synced main repo to initialize additional repos locally.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With