On 01/03/2014 02:44 AM, David C. Rankin wrote:
Slavek, all
After fixing the 3.5.13 source trees I had with:
git checkout v3.5.13-sru && git pull --rebase
I have missing dependencies. (basically all submodules that did not have a v3.5.13-sru branch were wiped out) Example:
On the 3.5.13 tree:
02:04 phoinix:/dat_f/tde/tde> l1 main/dependencies/ arts avahi-tqt dbus-1-tqt dbus-tqt qt3 tqtinterface
On R14:
02:14 phoinix:/dat_e/tde/tde> l1 main/dependencies/ arts avahi-tqt dbus-1-tqt dbus-tqt libart-lgpl libcaldav libcarddav python-tqt qt3 sip4-tqt tqca tqca-tls tqscintilla tqt3 tqtinterface
So basically libart-lgpl, libcaldav, libcarddav, python-tqt, sip4-tqt, tqca, tqca-tls, and tqscintilla were all dropped from the tree. (I'm sure I'm missing others under applications/ as well.
How do I pull all the remaining R14 sources/sub-modules into my new 3.5.13 tree? Do I have to do a manual diff of the directory structures and then do a manual "git checkout master -- <missing>" for each missing dir --or-- is there a better way to do it? The only other way I can think of would be to do a full git checkout master and covert the entire tree to master and then come back and switch submodules that have v3.5.13-sru branches back?
How do you suggest I fill in the 3.5.13 tree?
I think the problem is this:
16:27 phoinix:/dat_f/tde/tde> git checkout v3.5.13-sru -- scripts 16:27 phoinix:/dat_f/tde/tde/scripts> git branch -l experimental master * v3.5.13-sru
16:28 phoinix:/dat_f/tde/tde> git submodule init -- scripts 16:28 phoinix:/dat_f/tde/tde> git submodule update -- scripts Submodule path 'scripts': checked out '47fb38fad730f4fdfc21e6a89dea1c7a63bb0b71' 16:29 phoinix:/dat_f/tde/tde/scripts> git branch -l * (detached from 47fb38f) master v3.5.13-sru
If you ever run submodule update without immediately issuing a "git checkout <branch>" you will *detach* the submodule: (from man git-submodule)
<quote>
update Update the registered submodules, i.e. clone missing submodules and checkout the commit specified in the index of the containing repository. This will make the submodules HEAD be detached unless --rebase or --merge is specified or the key submodule.$name.update is set to rebase, merge or none. none can be overridden by specifying --checkout. Setting the key submodule.$name.update to !command will cause command to be run. command can be any arbitrary shell command that takes a single argument, namely the sha1 to update to. </quote>
The switch_all_submodules_to_head_and_clean script is the problem. When you issue:
git submodule update git submodule foreach "git checkout $branch && $THISSCRIPT $gituser"
it *ONLY* does 'foreach' for modules within the current branch. If the current toplevel branch is 'v3.5.13-sru' then all submodules that do NOT have a 'v3.5.13-sru' branch are not included in the foreach loop and are left *detached*. For example issuing:
git submodule foreach "git branch -r"
Does not list "main/dependencies/tqscintilla" because there is no v3.5.13-sru branch. Checking the status of main/dependencies/tqscintilla shows:
16:56 phoinix:/dat_f/tde/tde/main/dependencies/tqscintilla> git branch -l * (detached from 4285f9d) master
So git is very unhappy with the tree. Is there an easier way to fix this other than looping through all directories and doing an if git branch -r | grep -q sru; then git checkout v3.5.13-sru && git pull; else git checkout master && git pull; fi ??