Go to file
Jens Lehmann 42639d2317 submodules: add the lib-submodule-update.sh test library
Add this test library to simplify covering all combinations of submodule
update scenarios without having to add those to a test of each work tree
manipulating command over and over again.

The functions test_submodule_switch() and test_submodule_forced_switch()
are intended to be called from a test script with a single argument. This
argument is either a work tree manipulating command (including any command
line options) or a function (when more than a single git command is needed
to switch work trees from the current HEAD to another commit). This
command (or function) is passed a target branch as argument. The two new
functions check that each submodule transition is handled as expected,
which currently means that submodule work trees are not affected until
"git submodule update" is called. The "forced" variant is for commands
using their '-f' or '--hard' option and expects them to overwrite local
modifications as a result. Each of these two functions contains 14
tests_expect_* calls.

Calling one of these test functions the first time creates a repository
named "submodule_update_repo". At first it contains two files, then a
single submodule is added in another commit followed by commits covering
all relevant submodule modifications. This repository is newly cloned into
the "submodule_update" for each test_expect_* to avoid interference
between different parts of the test functions (some to-be-tested commands
also manipulate refs along with the work tree, e.g. "git reset").

Follow-up commits will then call these two test functions for all work
tree manipulating commands (with a combination of all their options
relevant to what they do with the work tree) making sure they work as
expected. Later this test library will be extended to cover merges
resulting in conflicts too. Also it is intended to be easily extendable
for the recursive update functionality, where even more combinations of
submodule modifications have to be tested for.

This version documents two bugs in current Git with expected failures:

*) When a submodule is replaced with a tracked file of the same name the
   submodule work tree including any local modifications (and even the
   whole history if it uses a .git directory instead of a gitfile!) is
   silently removed.

*) Forced work tree updates happily manipulate files in the directory of a
   submodule that has just been removed in the superproject (but is of
   course still present in the work tree due to the way submodules are
   currently handled). This becomes dangerous when files in the submodule
   directory are overwritten by files from the new superproject commit, as
   any modifications to the submodule files will be lost) and is expected
   to also destroy history in the - admittedly unlikely case - the new
   commit adds a file named ".git" to the submodule directory.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2014-07-14 12:06:15 -07:00
Documentation Third batch for 2.1 2014-06-16 12:39:35 -07:00
block-sha1
builtin Merge branch 'lt/log-auto-decorate' 2014-06-16 12:18:41 -07:00
compat Merge branch 'cb/byte-order' 2014-06-16 10:07:18 -07:00
contrib Merge branch 'jk/complete-merge-pull' 2014-06-16 12:17:53 -07:00
ewah ewah_bitmap.c: do not assume size_t and eword_t are the same size 2014-04-22 16:21:16 -07:00
git-gui Merge branch 'jl/use-vsatisfy-correctly-for-2.0' 2014-05-19 10:35:24 -07:00
gitk-git
gitweb Merge branch 'jl/nor-or-nand-and' 2014-04-08 12:00:28 -07:00
mergetools mergetools: add vimdiff3 mode 2014-04-22 12:49:07 -07:00
perl Merge branch 'mm/pager-less-sans-S' 2014-06-06 11:02:59 -07:00
po fr: a lot of good fixups 2014-05-17 19:08:59 +02:00
ppc
t submodules: add the lib-submodule-update.sh test library 2014-07-14 12:06:15 -07:00
templates
vcs-svn
xdiff
.gitattributes
.gitignore Merge branch 'tb/unicode-6.3-zero-width' 2014-06-06 11:29:38 -07:00
.mailmap
COPYING
GIT-VERSION-GEN First batch for 2.1 2014-06-03 12:09:13 -07:00
INSTALL
LGPL-2.1
Makefile Merge branch 'tb/unicode-6.3-zero-width' 2014-06-06 11:29:38 -07:00
README
RelNotes First batch for 2.1 2014-06-03 12:09:13 -07:00
abspath.c
aclocal.m4
advice.c Merge branch 'jk/error-resolve-conflict-advice' 2014-06-16 12:18:47 -07:00
advice.h
alias.c
alloc.c
archive-tar.c
archive-zip.c
archive.c
archive.h
argv-array.c argv-array: drop "detach" code 2014-05-15 09:49:12 -07:00
argv-array.h argv-array: drop "detach" code 2014-05-15 09:49:12 -07:00
attr.c
attr.h
base85.c
bisect.c Merge branch 'nd/log-show-linear-break' 2014-04-03 12:38:11 -07:00
bisect.h
blob.c
blob.h
branch.c Merge branch 'an/branch-config-message' 2014-03-31 16:31:20 -07:00
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c Merge branch 'nd/log-show-linear-break' 2014-04-03 12:38:11 -07:00
bundle.h
cache-tree.c
cache-tree.h
cache.h Merge branch 'sk/windows-unc-path' 2014-06-16 10:07:03 -07:00
check-builtins.sh check-builtins.sh: use the $(...) construct for command substitution 2014-03-25 13:42:52 -07:00
check-racy.c
check_bindir
color.c
color.h
column.c run_column_filter: use argv_array 2014-05-15 09:49:10 -07:00
column.h
combine-diff.c Merge branch 'mk/show-s-no-extra-blank-line-for-merges' 2014-06-06 11:35:02 -07:00
command-list.txt
commit-slab.h
commit.c commit.c: rearrange xcalloc arguments 2014-05-27 14:00:43 -07:00
commit.h Merge branch 'bp/commit-p-editor' into maint 2014-04-08 12:07:06 -07:00
config.c Merge branch 'ow/config-mailmap-pathname' 2014-06-16 12:18:24 -07:00
config.mak.in
config.mak.uname Merge branch 'sk/msvc-dynlink-crt' 2014-06-03 12:06:46 -07:00
configure.ac Merge branch 'ks/tree-diff-nway' 2014-06-03 12:06:40 -07:00
connect.c git_connect: use argv_array 2014-05-15 09:49:10 -07:00
connect.h
connected.c
connected.h
convert.c
convert.h
copy.c
credential-cache--daemon.c
credential-cache.c
credential-store.c
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c Merge branch 'jk/daemon-tolower' 2014-06-16 10:07:15 -07:00
date.c i18n: fix uncatchable comments for translators in date.c 2014-04-17 11:03:28 -07:00
decorate.c
decorate.h
delta.h comments: fix misuses of "nor" 2014-03-31 15:29:27 -07:00
diff-delta.c
diff-lib.c Merge branch 'jk/diff-files-assume-unchanged' 2014-06-16 10:06:12 -07:00
diff-no-index.c Merge branch 'jc/fix-diff-no-index-diff-opt-parse' into maint 2014-04-09 11:59:16 -07:00
diff.c Merge branch 'bg/xcalloc-nmemb-then-size' 2014-06-16 12:17:50 -07:00
diff.h Merge branch 'ks/tree-diff-nway' 2014-06-03 12:06:40 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c pickaxe: simplify kwset loop in contains() 2014-03-24 15:13:17 -07:00
diffcore-rename.c
diffcore.h
dir.c dir.c:trim_trailing_spaces(): fix for " \ " sequence 2014-06-02 15:48:48 -07:00
dir.h
editor.c
entry.c Merge branch 'mh/remove-subtree-long-pathname-fix' into maint 2014-04-03 13:39:05 -07:00
environment.c Merge branch 'sh/enable-preloadindex' 2014-06-16 12:18:49 -07:00
exec_cmd.c
exec_cmd.h
fast-import.c fast-import: add support to delete refs 2014-04-21 11:47:34 -07:00
fetch-pack.c Merge branch 'jk/shallow-update-fix' into maint 2014-04-03 13:39:03 -07:00
fetch-pack.h
fmt-merge-msg.h
fsck.c Merge branch 'hs/simplify-bit-setting-in-fsck-tree' 2014-03-31 16:30:44 -07:00
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl Merge branch 'jl/nor-or-nand-and' 2014-04-08 12:00:28 -07:00
git-am.sh Merge branch 'jl/nor-or-nand-and' 2014-04-08 12:00:28 -07:00
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'sk/windows-unc-path' 2014-06-16 10:07:03 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-difftool.perl
git-filter-branch.sh
git-instaweb.sh git-instaweb: add support for Apache 2.4 2014-05-27 12:57:19 -07:00
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh mergetool: run prompt only if guessed tool 2014-04-22 12:49:46 -07:00
git-p4.py git-p4: Do not include diff in spec file when just preparing p4 2014-05-27 12:35:15 -07:00
git-parse-remote.sh
git-pull.sh Sync with maint 2014-06-12 12:22:38 -07:00
git-quiltimport.sh
git-rebase--am.sh Merge branch 'km/avoid-non-function-return-in-rebase' 2014-04-21 10:42:46 -07:00
git-rebase--interactive.sh Merge branch 'rr/rebase-autostash-fix' 2014-06-16 10:06:57 -07:00
git-rebase--merge.sh Merge branch 'ep/shell-command-substitution' 2014-06-03 12:06:45 -07:00
git-rebase.sh Merge branch 'rr/rebase-autostash-fix' 2014-06-16 10:06:57 -07:00
git-relink.perl
git-remote-testgit.sh Merge branch 'ep/shell-assign-and-export-vars' 2014-06-06 11:38:51 -07:00
git-request-pull.sh Merge branch 'lt/request-pull' 2014-05-19 10:35:36 -07:00
git-send-email.perl send-email: windows drive prefix (e.g. C:) appears only at the beginning 2014-04-23 09:37:38 -07:00
git-sh-i18n.sh
git-sh-setup.sh pager: remove 'S' from $LESS by default 2014-05-07 13:41:04 -07:00
git-stash.sh Merge branch 'ep/shell-assign-and-export-vars' 2014-06-06 11:38:51 -07:00
git-submodule.sh Merge branch 'sk/submodules-absolute-path-on-windows' 2014-06-06 11:26:38 -07:00
git-svn.perl Git 2.0: git svn: Set default --prefix='origin/' if --prefix is not given 2014-04-19 11:30:13 +00:00
git-web--browse.sh git-web--browse.sh: use the $( ... ) construct for command substitution 2014-04-23 15:17:02 -07:00
git.c Merge branch 'lr/git-run-setup-gently' 2014-06-03 12:06:43 -07:00
git.rc
git.spec.in
gpg-interface.c
gpg-interface.h
graph.c
graph.h
grep.c Merge branch 'as/grep-fullname-config' 2014-06-03 12:06:39 -07:00
grep.h
hashmap.c
hashmap.h
help.c
help.h
hex.c
http-backend.c
http-fetch.c
http-push.c http-push.c: rearrange xcalloc arguments 2014-05-27 14:02:45 -07:00
http-walker.c
http.c http: default text charset to iso-8859-1 2014-05-27 09:59:22 -07:00
http.h http: optionally extract charset parameter from content-type 2014-05-27 09:59:19 -07:00
ident.c
imap-send.c Merge branch 'bg/xcalloc-nmemb-then-size' 2014-06-16 12:17:50 -07:00
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c
line-log.h
line-range.c
line-range.h
list-objects.c Merge branch 'jk/pack-bitmap' 2014-04-08 12:00:33 -07:00
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c Merge branch 'nd/log-show-linear-break' 2014-04-03 12:38:11 -07:00
log-tree.h
mailmap.c
mailmap.h
match-trees.c
merge-blobs.c
merge-blobs.h
merge-recursive.c merge-recursive.c: fix case-changing merge bug 2014-05-07 13:53:10 -07:00
merge-recursive.h
merge.c
mergesort.c
mergesort.h
name-hash.c
notes-cache.c refs.h: rename the action_on_err constants 2014-04-07 12:09:11 -07:00
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c refs.h: rename the action_on_err constants 2014-04-07 12:09:11 -07:00
notes-utils.h
notes.c notes.c: rearrange xcalloc arguments 2014-05-27 14:02:45 -07:00
notes.h
object.c
object.h Merge branch 'nd/log-show-linear-break' 2014-04-03 12:38:11 -07:00
pack-bitmap-write.c
pack-bitmap.c add `ignore_missing_links` mode to revwalk 2014-04-04 13:31:38 -07:00
pack-bitmap.h
pack-check.c
pack-objects.c pack-objects: use free()+xcalloc() instead of xrealloc()+memset() 2014-06-02 13:51:22 -07:00
pack-objects.h
pack-revindex.c pack-revindex.c: rearrange xcalloc arguments 2014-05-27 14:02:45 -07:00
pack-revindex.h
pack-write.c
pack.h
pager.c Merge branch 'je/pager-do-not-recurse' 2014-06-06 11:17:00 -07:00
parse-options-cb.c
parse-options.c Merge branch 'mr/opt-set-ptr' 2014-04-08 12:00:17 -07:00
parse-options.h Merge branch 'jk/squelch-compiler-warning-from-funny-error-macro' 2014-06-06 11:21:36 -07:00
patch-delta.c
patch-ids.c
patch-ids.h
path.c Windows: allow using UNC path for git repository 2014-06-10 13:30:04 -07:00
pathspec.c
pathspec.h
pkt-line.c
pkt-line.h comments: fix misuses of "nor" 2014-03-31 15:29:27 -07:00
preload-index.c
pretty.c Merge branch 'as/pretty-truncate' 2014-06-16 10:07:12 -07:00
prio-queue.c
prio-queue.h
progress.c
progress.h
prompt.c
prompt.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c Merge branch 'ym/fix-opportunistic-index-update-race' 2014-06-03 12:06:41 -07:00
reflog-walk.c reflog-walk.c: rearrange xcalloc arguments 2014-05-27 14:02:45 -07:00
reflog-walk.h
refs.c Merge branch 'dt/refs-check-refname-component-optim' 2014-06-16 12:18:52 -07:00
refs.h Merge branch 'jl/remote-rm-prune' 2014-06-16 12:17:58 -07:00
remote-curl.c remote-curl: reencode http error messages 2014-05-27 09:59:22 -07:00
remote-testsvn.c
remote.c remote.c: rearrange xcalloc arguments 2014-05-27 14:02:45 -07:00
remote.h
replace_object.c
rerere.c
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'jc/shortlog-ref-exclude' 2014-06-09 11:30:13 -07:00
revision.h Merge branch 'jk/pack-bitmap' 2014-04-08 12:00:33 -07:00
run-command.c run-command: store an optional argv_array 2014-05-15 09:49:09 -07:00
run-command.h run-command: store an optional argv_array 2014-05-15 09:49:09 -07:00
send-pack.c
send-pack.h
sequencer.c sequencer.c: check for lock failure and bail early in fast_forward_to 2014-04-17 12:54:15 -07:00
sequencer.h
server-info.c
setup.c Merge branch 'mw/symlinks' into maint 2014-05-28 15:45:57 -07:00
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h
sha1_file.c Merge branch 'jk/report-fail-to-read-objects-better' 2014-06-16 10:06:15 -07:00
sha1_name.c Merge branch 'nd/log-show-linear-break' 2014-04-03 12:38:11 -07:00
shallow.c
shell.c
shortlog.h
show-index.c
sideband.c sideband.c: do not use ANSI control sequence on non-terminal 2014-06-02 11:02:27 -07:00
sideband.h
sigchain.c
sigchain.h
strbuf.c Merge branch 'jk/http-errors' 2014-06-16 12:18:36 -07:00
strbuf.h Merge branch 'jk/http-errors' 2014-06-16 12:18:36 -07:00
streaming.c
streaming.h
string-list.c
string-list.h string-list: spell all values out that are given to a string_list initializer 2014-06-06 13:49:19 -07:00
submodule.c
submodule.h
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c comments: fix misuses of "nor" 2014-03-31 15:29:27 -07:00
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-genrandom.c
test-hashmap.c
test-index-version.c
test-line-buffer.c
test-match-trees.c
test-mergesort.c
test-mktemp.c
test-parse-options.c parse-options: remove unused OPT_SET_PTR 2014-03-31 13:01:19 -07:00
test-path-utils.c
test-prio-queue.c
test-read-cache.c
test-regex.c
test-revision-walking.c
test-run-command.c
test-scrap-cache-tree.c
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-list.c
test-subprocess.c
test-svn-fe.c
test-urlmatch-normalization.c
test-wildmatch.c
thread-utils.c
thread-utils.h
trace.c
transport-helper.c Merge branch 'fc/remote-helper-refmap' 2014-06-16 12:18:15 -07:00
transport.c
transport.h
tree-diff.c tree-diff: rework diff_tree() to generate diffs for multiparent cases as well 2014-04-07 14:40:46 -07:00
tree-walk.c
tree-walk.h
tree.c
tree.h
unicode_width.h utf8: make it easier to auto-update git_wcwidth() 2014-05-12 10:38:01 -07:00
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c
unpack-trees.h
update_unicode.sh utf8: make it easier to auto-update git_wcwidth() 2014-05-12 10:38:01 -07:00
upload-pack.c Merge branch 'nd/log-show-linear-break' 2014-04-03 12:38:11 -07:00
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c userdiff: have 'cpp' hunk header pattern catch more C++ anchor points 2014-03-21 15:03:32 -07:00
userdiff.h
utf8.c Merge branch 'tb/unicode-6.3-zero-width' 2014-06-06 11:29:38 -07:00
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c object.h: centralize object flag allocation 2014-03-25 15:09:24 -07:00
walker.h
wildmatch.c
wildmatch.h
wrap-for-bin.sh
wrapper.c read-cache.c: verify index file before we opportunistically update it 2014-04-10 12:27:58 -07:00
write_or_die.c
ws.c
wt-status.c Merge branch 'jl/status-added-submodule-is-never-ignored' 2014-06-16 10:07:19 -07:00
wt-status.h Merge branch 'mm/status-porcelain-format-i18n-fix' 2014-03-31 16:31:25 -07:00
xdiff-interface.c
xdiff-interface.h
zlib.c

README

////////////////////////////////////////////////////////////////

	Git - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public
License version 2 (some parts of it are under different licenses,
compatible with the GPLv2). It was originally written by Linus
Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org (read
Documentation/SubmittingPatches for instructions on patch submission).
To subscribe to the list, send an email with just "subscribe git" in
the body to majordomo@vger.kernel.org. The mailing list archives are
available at http://news.gmane.org/gmane.comp.version-control.git/,
http://marc.info/?l=git and other archival sites.

The maintainer frequently sends the "What's cooking" reports that
list the current status of various development topics to the mailing
list.  The discussion following them give a good reference for
project status, development direction and remaining tasks.