Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Circular submodule dependency causes recursive clones or submodule updates to fail #301

Closed
xndc opened this issue Jul 26, 2019 · 6 comments

Comments

@xndc
Copy link

xndc commented Jul 26, 2019

Trying to use either of the following:

git clone https:/electronicarts/EASTL --recursive
git submodule update --init --recursive

Results in an infinite loop:

Cloning into 'EASTL'...
Submodule 'test/packages/EAAssert' (https:/electronicarts/EAAssert.git) registered for path 'test/packages/EAAssert'
Submodule 'test/packages/EABase' (https:/electronicarts/EABase.git) registered for path 'test/packages/EABase'
Submodule 'test/packages/EAMain' (https:/electronicarts/EAMain.git) registered for path 'test/packages/EAMain'
Submodule 'test/packages/EAStdC' (https:/electronicarts/EAStdC.git) registered for path 'test/packages/EAStdC'
Submodule 'test/packages/EATest' (https:/electronicarts/EATest.git) registered for path 'test/packages/EATest'
Submodule 'test/packages/EAThread' (https:/electronicarts/EAThread.git) registered for path 'test/packages/EAThread'
Cloning into 'C:/EASTL/test/packages/EAAssert'...
Cloning into 'C:/EASTL/test/packages/EABase'...
Cloning into 'C:/EASTL/test/packages/EAMain'...
Cloning into 'C:/EASTL/test/packages/EAStdC'...
Cloning into 'C:/EASTL/test/packages/EATest'...
Cloning into 'C:/EASTL/test/packages/EAThread'...
Submodule path 'test/packages/EAAssert': checked out 'e5e181255de2e883dd1f987c78ccc42ac81d3bca'
Submodule 'test/packages/EABase' ([email protected]:electronicarts/EABase.git) registered for path 'test/packages/EAAssert/test/packages/EABase'
Submodule 'test/packages/EAMain' ([email protected]:electronicarts/EAMain.git) registered for path 'test/packages/EAAssert/test/packages/EAMain'
Submodule 'test/packages/EASTL' ([email protected]:electronicarts/EASTL.git) registered for path 'test/packages/EAAssert/test/packages/EASTL'
Submodule 'test/packages/EAStdC' ([email protected]:electronicarts/EAStdC.git) registered for path 'test/packages/EAAssert/test/packages/EAStdC'
Submodule 'test/packages/EATest' ([email protected]:electronicarts/EATest.git) registered for path 'test/packages/EAAssert/test/packages/EATest'
Submodule 'test/packages/EAThread' ([email protected]:electronicarts/EAThread.git) registered for path 'test/packages/EAAssert/test/packages/EAThread'
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EABase'...
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EAMain'...
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EASTL'...
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EAStdC'...
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EATest'...
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EAThread'...
Submodule path 'test/packages/EAAssert/test/packages/EABase': checked out 'dc8d4d399f486b5164efc60db4a92d65d26a72c8'
Submodule 'test/packages/EAAssert' ([email protected]:electronicarts/EAAssert.git) registered for path 'test/packages/EAAssert/test/packages/EABase/test/packages/EAAssert'
Submodule 'test/packages/EAMain' ([email protected]:electronicarts/EAMain.git) registered for path 'test/packages/EAAssert/test/packages/EABase/test/packages/EAMain'
Submodule 'test/packages/EASTL' ([email protected]:electronicarts/EASTL.git) registered for path 'test/packages/EAAssert/test/packages/EABase/test/packages/EASTL'
Submodule 'test/packages/EAStdC' ([email protected]:electronicarts/EAStdC.git) registered for path 'test/packages/EAAssert/test/packages/EABase/test/packages/EAStdC'
Submodule 'test/packages/EATest' ([email protected]:electronicarts/EATest.git) registered for path 'test/packages/EAAssert/test/packages/EABase/test/packages/EATest'
Submodule 'test/packages/EAThread' ([email protected]:electronicarts/EAThread.git) registered for path 'test/packages/EAAssert/test/packages/EABase/test/packages/EAThread'
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EABase/test/packages/EAAssert'...
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EABase/test/packages/EAMain'...
Cloning into 'C:/EASTL/test/packages/EAAssert/test/packages/EABase/test/packages/EASTL'...
[...]

Workaround for cloning:

> git clone https:/electronicarts/EASTL
> cd EASTL
> git submodule update --init

Workaround for adding EASTL as submodule:

> git submodule add https:/electronicarts/EASTL lib/eastl
> cd lib/eastl
> git submodule update --init

The --recursive option is used and recommended by practically everyone, as far as I can tell, so this is likely to trip a few people up. If you can't or won't fix this issue, you might want to consider placing a note about it in the README.

@xndc
Copy link
Author

xndc commented Jul 26, 2019

To build EASTL as part of a CMake project, you also need to include most of the packages now, and also run a submodule update on them:

add_subdirectory(lib/eastl)
add_subdirectory(lib/eastl/test/packages/EAAssert)
add_subdirectory(lib/eastl/test/packages/EABase)
add_subdirectory(lib/eastl/test/packages/EAStdC)
add_subdirectory(lib/eastl/test/packages/EAThread)
cd lib/eastl/test/packages
cd EAAssert;    git submodule update --init
cd ../EABase;   git submodule update --init
cd ../EAStdC;   git submodule update --init
cd ../EAThread; git submodule update --init

This is only somewhat related, but I hope it helps someone not waste as much time as I have on this.

@rparolin
Copy link
Contributor

Some context, the change was introduced because we broke out our internal library dependencies into separate repos. So we can manage them seperate to EASTL in addition to having our unit tests running for the respective packages. I'm happy to add a comment in the readme.md. Please let me know if you have suggestions on how this could be implemented better.

@xndc
Copy link
Author

xndc commented Jul 26, 2019

I'd just like to know what the correct workflow is. Am I supposed to manually run submodule update for the main EASTL repo and every top-level submodule every time I clone my project? How do you actually work with these repositories at EA?

@rparolin
Copy link
Contributor

rparolin commented Jul 27, 2019

We don't use these repositories internally git and cmake are used only for the open source versions of the technologies.

This gets you everything you need:

git clone https:/electronicarts/EASTL
cd EASTL
git submodule update --init

I'll add this to the docs.

@rparolin
Copy link
Contributor

5bc06c3

@fwsGonzo
Copy link

Yea, this was annoying

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants