Re: [PATCH] Add git-submodule command

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 5/26/07, Junio C Hamano <junkio@xxxxxxx> wrote:
Lars Hjemli <hjemli@xxxxxxxxx> 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@xxxxxxxxx>
> ---
>
> On 5/26/07, Lars Hjemli <hjemli@xxxxxxxxx> 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 ;-)


> +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!


> 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.


> +
> +#
> +# 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


> +             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.


> +
> +             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 ;-)


> +             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


> +
> +             $(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
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux