git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Add git-submodule command

From
LHLars Hjemli <hjemli@gmail.com>
Date
May 26, 2007, 09:39 UTC
Message-ID
<8c5c35580705260239x4acf0318vfda3651fb315f8c5@mail.gmail.com>
In-Reply-To
<7v1wh4ped4.fsf@assigned-by-dhcp.cox.net>
On 5/26/07, Junio C Hamano <junkio@cox.net> wrote:
Show 15 quoted lines
> Lars Hjemli <hjemli@gmail.com> writes:
>
> > With this entry in .gitmodules (and a commit reference in the index entry for
> > the path "git"), the command 'git submodule init' will clone the repository
> > at kernel.org into the directory "git".
> >
> > Signed-off-by: Lars Hjemli <hjemli@gmail.com>
> > ---
> >
> > On 5/26/07, Lars Hjemli <hjemli@gmail.com> wrote:
> >> I'll redo the patch, removing the branch-specific things, and try to
> >> shut up :)
>
> Hey, don't shut up.  Starting small and covering corner cases
> incrementally is really the right approach.
Ok, my meds have kicked in and I'm ready for more ;-)
Show 11 quoted lines
>
> > +status::
> > +     Show the status of the submodules. This will print the sha1 of the
> > +     currently checked out commit for each submodule, along with the
> > +     submodule path and the output of gitlink:git-describe[1] for the
> > +     sha1. Each sha1 will be prefixed with '-' if the submodule is not
> > +     initialized and '+' if the currently checked out submodule commit
> > +     does not match the sha1 found in the index of the containing
> > +     repository. This command is the default command for git-submodule.
>
> (markup) probably you would want `` there for typewriter face.
Ok, will fix
>
> (wording) didn't we have "the name of the hash function is
> SHA-1" patch earlier?  I'd personally prefer calling them
> "object names", though...
Some quick grepping wasn't helpfull:

~/src/git/Documentation$ git grep sha1 | wc -l 98 ~/src/git/Documentation$ git grep SHA1 | wc -l 80 ~/src/git/Documentation$ git grep SHA-1 | wc -l 22

Would you prefer SHA-1?
>
> Other than that, the command description is very nicely done,
> which means the design of the command set hence the semantics is
> cleanly done.  Good job.
Thanks!
Show 23 quoted lines
>
> > diff --git a/git-submodule.sh b/git-submodule.sh
> > new file mode 100755
> > index 0000000..247b1ee
> > --- /dev/null
> > +++ b/git-submodule.sh
> > @@ -0,0 +1,172 @@
> > ...
> > +#
> > +# print stuff on stdout unless -q was specified
> > +#
> > +say()
> > +{
> > +     if test -z "$quiet"
> > +     then
> > +             echo -e "$@"
> > +     fi
> > +}
>
> We tend to avoid "echo -e" (not POSIX).  I do not see any string
> you feed to this function that you would _want_ backslash
> escaped sequences (actually I would suspect you would not want
> them).

I do use \t between submodule path and the result of git-describe, but it's not really needed. I'll drop it.

Show 12 quoted lines
>
> > +
> > +#
> > +# Run clone + checkout on missing submodules
> > +#
> > +# $@ = requested paths (default to all)
> > +#
> > +modules_init()
> > +{
> > +     git ls-files --stage -- $@ | grep -e '^160000 ' |
>
> Did you mean "$@", i.e. inside double-quotes?
That looks right, yes
Show 10 quoted lines
> > +             test -d "$path/.git" && continue
> > +
> > +             if test -d "$path"
> > +             then
> > +                     rmdir "$path" 2>/dev/null ||
> > +                     die "Directory '$path' exist, but not as a submodule"
> > +             fi
>
> Could the currently checked-out $path be a symlink to another
> directory, and what does the code do in such a case?

This I will have to test, but I _suspect_ it would fail on "test -e path" _unless_ the "test -d $path/.git" kicks in.

Show 7 quoted lines
>
> > +
> > +             test -e "$path" &&
> > +             die "A file already exist at path '$path'"
>
> "test -e" is a relatively new invention and I tended to stay
> away from it, but it should be safe to use these days...

Would you prefer separate -f and -l instead? Hmm, that would match up nicely with your concern about symlinks ;-)

Show 10 quoted lines
>
> > +             url=$(GIT_CONFIG=.gitmodules git-config module."$path".url)
> > +             test -z "$url" &&
> > +             die "No url found for submodule '$path' in .gitmodules"
> > +
> > +             git-clone "$url" "$path" ||
> > +             die "Clone of submodule '$path' failed"
>
> "git-clone -n" please, as you will checkout something different
> in the next step anyway.
Nice, I hadn't noticed -n, will fix
Show 9 quoted lines
>
> > +
> > +             $(unset GIT_DIR && cd "$path" && git-checkout -q "$sha1") ||
> > +             die "Checkout of submodule '$path' failed"
>
> Lose $() around this, as it is not producing a string which is
> the name of the command to run.  You do want a subshell here
> because of chdir, so instead of losing $(), replace them with
> ().
Heh, there's always something new to learn on this list, thanks.

-- larsh

Previous: Junio C HamanoNext: Johannes Schindelin
Message 18 of 26 in “Add git-submodule command”
  1. Add git-submodule commandLars Hjemli, May 25, 2007
  2. Johannes SchindelinMay 25, 2007
  3. Johannes SchindelinMay 25, 2007
  4. Lars HjemliMay 25, 2007
  5. Johannes SchindelinMay 25, 2007
  6. Lars HjemliMay 25, 2007
  7. Johannes SchindelinMay 25, 2007
  8. Lars HjemliMay 25, 2007
  9. Add git-submodule commandLars Hjemli, May 25, 2007
  10. Johannes SchindelinMay 25, 2007
  11. Junio C HamanoMay 25, 2007
  12. Lars HjemliMay 25, 2007
  13. Junio C HamanoMay 25, 2007
  14. Lars HjemliMay 25, 2007
  15. Add git-submodule commandLars Hjemli, May 26, 2007
  16. Johannes SchindelinMay 26, 2007
  17. Junio C HamanoMay 26, 2007
  18. Lars HjemliMay 26, 2007
  19. Johannes SchindelinMay 26, 2007
  20. Add git-submodule commandLars Hjemli, May 26, 2007
  21. Simon HausmannMay 26, 2007
  22. Lars HjemliMay 26, 2007
  23. Johannes SchindelinMay 25, 2007
  24. Linus TorvaldsMay 25, 2007
  25. Johannes SchindelinMay 25, 2007
  26. Lars HjemliMay 25, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.