gvvaughan / slingshot

Slingshot releases rocks!
Other
3 stars 2 forks source link

Improving offline installation possibilities #13

Open msva opened 9 years ago

msva commented 9 years ago

Hi, @gvvaughan!

Sorry, that it is still not a Pull Request, buy an issue, but for now I have ideas about "what" to do, but still not "how" ;)

So,

1) it is already --gnulib-srcdir switch for bootstrap. But it has an issue, that until user specifies --skip-git it (bootstrap) wants that srcdir should be a git repo, despite that srcdir is completely gnulib dir even without it.

2) I think, it will also be nice to have same switch for slingshot dir (to be able to install it system-wide and then use it to build&install packages using it.

gvvaughan commented 9 years ago

Howdy,

thanks for taking the time to think about this and raise an issue...

1) that's by design, because bootstrap takes care to use the exact gnulib hash that the lyaml source checkout has been tested against -- and --skip-git is there if you are sure you know you want to bypass that care; 2) I'm not convinced, the slingshot repo is tiny, and consequently easy and fast to use as a submodule, gnulib on the other hand is gigantic, especially when you also checkout the history - hence gnulib-srcdir allows you to set up a local gnulib repo (even from a different project's submodule gnulib) for bootstrap using projects to clone from instead of clogging up the network. slingshot, by comparison is barely a gnat!

You might be able to convince me with some benchmarks and a patch though :-)

Cheers, Gary

msva commented 9 years ago

2) yeah, slingshot repo is tiny, but the problem is in impossibility of offline-installation (with fetching both slingshot and package sources in advance) ;)

// Also, you have not .gitmodules in, for example, luaposix, so there is actually no submodules there, until ./bootstrap do some magic, so package manager can't prefetch them before the build ;)

gvvaughan commented 9 years ago

Well .gitmodules format is amazingly simple:

[submodule "foo"]
        path=subdirectoryname
        url=git://github.com/projectowner/projectname.git

...and repeat for each module.

All that bootstrap does is see what modules are needed (gnulib and slingshot in the case of luaposix) and then call:

git submodule init -- foo
git submodule update -- foo

for each module. No magic required :)

msva commented 9 years ago

well, as I previously said, repos are fetching in distfiles as bare repos, and touching anything there manually is prohibited by the policy. But I'll try to search for some dirty hooks for adding submodules without .gitmodules in the repo...

gvvaughan commented 9 years ago

Sorry for the delay... busy week!

Ah yes, I keep forgetting about your non-networked install requirement... so, if I simply commit the .gitmodules file in bootstrap using projects until I find the time to migrate to a new build system, will that solve your problems?

msva commented 9 years ago

Actually, yes, it will solve (although, I'll test it tomorrow or a day after), but it will also trigger to double-fetch gnulib and ignore system-wide installed one (although, AFAIR, it anyway behaviour recommended by you, since even bleeding egde gnulib can be either too old or too new) ;)

gvvaughan commented 9 years ago

you needn't double fetch, you just need to have a (possibly shared) git checkout of gnulib, and then use --gnulib-src to point each bootstrap using project at that shared checkout... that will cause the local copy in the bootstrapped project to use the already checked out gnulib rather than hitting the network for another copy.

Anyway, let me know if your testing reveals that it would be helpful for me to check in the .gitmodules files, and what projects you'd like me to do that for.