Go to file
Junio C Hamano 730f72840c unpack-trees.c: look ahead in the index
This makes the traversal of index be in sync with the tree traversal.
When unpack_callback() is fed a set of tree entries from trees, it
inspects the name of the entry and checks if the an index entry with
the same name could be hiding behind the current index entry, and

 (1) if the name appears in the index as a leaf node, it is also
     fed to the n_way_merge() callback function;

 (2) if the name is a directory in the index, i.e. there are entries in
     that are underneath it, then nothing is fed to the n_way_merge()
     callback function;

 (3) otherwise, if the name comes before the first eligible entry in the
     index, the index entry is first unpacked alone.

When traverse_trees_recursive() descends into a subdirectory, the
cache_bottom pointer is moved to walk index entries within that directory.

All of these are omitted for diff-index, which does not even want to be
fed an index entry and a tree entry with D/F conflicts.

This fixes 3-way read-tree and exposes a bug in other parts of the system
in t6035, test #5.  The test prepares these three trees:

 O = HEAD^
    100644 blob e69de29bb2    a/b-2/c/d
    100644 blob e69de29bb2    a/b/c/d
    100644 blob e69de29bb2    a/x

 A = HEAD
    100644 blob e69de29bb2    a/b-2/c/d
    100644 blob e69de29bb2    a/b/c/d
    100644 blob 587be6b4c3f93f93c489c0111bba5596147a26cb    a/x

 B = master
    120000 blob a36b77384451ea1de7bd340ffca868249626bc52    a/b
    100644 blob e69de29bb2    a/b-2/c/d
    100644 blob e69de29bb2    a/x

With a clean index that matches HEAD, running

    git read-tree -m -u --aggressive $O $A $B

now yields

    120000 a36b77384451ea1de7bd340ffca868249626bc52 3       a/b
    100644 e69de29bb2 0       a/b-2/c/d
    100644 e69de29bb2 1       a/b/c/d
    100644 e69de29bb2 2       a/b/c/d
    100644 587be6b4c3f93f93c489c0111bba5596147a26cb 0       a/x

which is correct.  "master" created "a/b" symlink that did not exist,
and removed "a/b/c/d" while HEAD did not do touch either path.

Before this series, read-tree did not notice the situation and resolved
addition of "a/b" and removal of "a/b/c/d" independently.  If A = HEAD had
another path "a/b/c/e" added, this merge should conflict but instead it
silently resolved "a/b" and then immediately overwrote it to add
"a/b/c/e", which was quite bogus.

Tests in t1012 start to work with this.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-01-07 15:00:14 -08:00
Documentation Git 1.6.6 2009-12-23 12:23:11 -08:00
block-sha1
compat Explicitly truncate bswap operand to uint32_t 2009-11-25 00:16:38 -08:00
contrib bash: Support new 'git fetch' options 2009-12-12 15:32:07 -08:00
git-gui Merge git://repo.or.cz/git-gui 2009-12-09 15:38:51 -08:00
gitk-git Merge git://git.kernel.org/pub/scm/gitk/gitk 2009-12-09 15:38:42 -08:00
gitweb gitweb: Describe (possible) gitweb.js minification in gitweb/README 2009-12-03 12:38:45 -08:00
perl
ppc
t unpack-trees.c: look ahead in the index 2010-01-07 15:00:14 -08:00
templates Merge branch 'bs/maint-pre-commit-hook-sample' into maint 2009-11-16 00:03:15 -08:00
xdiff
.gitattributes
.gitignore Merge branch 'jh/notes' (early part) 2009-11-20 23:53:55 -08:00
.mailmap
COPYING
GIT-VERSION-GEN Git 1.6.6 2009-12-23 12:23:11 -08:00
INSTALL
Makefile Merge branch 'rj/maint-cygwin-count-objects' into maint 2009-12-03 13:53:54 -08:00
README
RelNotes Git 1.6.5.7 2009-12-16 12:45:25 -08:00
abspath.c
advice.c merge-recursive: point the user to commit when file would be overwritten. 2009-11-22 16:07:27 -08:00
advice.h merge-recursive: point the user to commit when file would be overwritten. 2009-11-22 16:07:27 -08:00
alias.c
alloc.c
archive-tar.c
archive-zip.c
archive.c Refactor pretty_print_commit arguments into a struct 2009-10-19 22:28:20 -07:00
archive.h
attr.c
attr.h
base85.c
bisect.c
bisect.h
blob.c
blob.h
branch.c
branch.h
builtin-add.c
builtin-annotate.c
builtin-apply.c builtin-apply.c: pay attention to -p<n> when determining the name 2009-11-26 19:02:24 -08:00
builtin-archive.c Fix archive format with -- on the command line 2009-12-10 15:29:05 -08:00
builtin-bisect--helper.c
builtin-blame.c Merge branch 'maint' 2009-12-22 12:32:39 -08:00
builtin-branch.c Merge branch 'maint' to sync with 1.6.5.7 2009-12-16 12:47:15 -08:00
builtin-bundle.c
builtin-cat-file.c
builtin-check-attr.c
builtin-check-ref-format.c check-ref-format -h: it does not know the --print option yet 2009-11-10 20:45:23 -08:00
builtin-checkout-index.c
builtin-checkout.c fixup tr/stash-format merge 2009-10-30 20:18:31 -07:00
builtin-clean.c
builtin-clone.c clone: detect extra arguments 2009-10-30 15:18:11 -07:00
builtin-commit-tree.c Show usage string for 'git commit-tree -h' 2009-11-09 17:08:44 -08:00
builtin-commit.c Merge branch 'maint' to sync with 1.6.5.7 2009-12-16 12:47:15 -08:00
builtin-config.c
builtin-count-objects.c
builtin-describe.c describe: do not use unannotated tag even if exact match 2009-11-20 21:58:11 -08:00
builtin-diff-files.c
builtin-diff-index.c
builtin-diff-tree.c Teach --stdin option to "log" family 2009-11-20 15:10:29 -08:00
builtin-diff.c
builtin-fast-export.c
builtin-fetch-pack.c Smart fetch over HTTP: client side 2009-11-04 17:58:15 -08:00
builtin-fetch.c Merge branch 'bg/fetch-multi' 2009-11-23 00:03:15 -08:00
builtin-fmt-merge-msg.c
builtin-for-each-ref.c
builtin-fsck.c Check the format of more printf-type functions 2009-11-15 18:24:58 -08:00
builtin-gc.c gc --auto --quiet: make the notice a bit less verboase 2009-10-21 15:28:42 -07:00
builtin-grep.c Merge branch 'bc/grep-i-F' into maint 2009-12-03 13:51:26 -08:00
builtin-help.c help: Do not unnecessarily look for a repository 2009-12-01 12:10:09 -08:00
builtin-init-db.c
builtin-log.c Merge branch 'fc/maint-format-patch-pathspec-dashes' into maint 2009-12-03 13:54:25 -08:00
builtin-ls-files.c Merge branch 'jk/maint-1.6.3-ls-files-i' into maint 2009-11-15 23:07:32 -08:00
builtin-ls-remote.c Require a struct remote in transport_get() 2009-11-03 21:39:28 -08:00
builtin-ls-tree.c ls-tree: migrate to parse-options 2009-11-17 21:58:12 -08:00
builtin-mailinfo.c Merge branch 'jc/mailinfo-remove-brackets' 2009-11-30 14:43:24 -08:00
builtin-mailsplit.c Show usage string for 'git mailsplit -h' 2009-11-10 11:06:57 -08:00
builtin-merge-base.c
builtin-merge-file.c
builtin-merge-ours.c Show usage string for 'git merge-ours -h' 2009-11-09 17:08:45 -08:00
builtin-merge-recursive.c merge-{recursive,subtree}: use usagef() to print usage 2009-11-10 12:00:21 -08:00
builtin-merge.c Merge branch 'mm/maint-merge-ff-error-message-fix' into maint 2009-12-08 22:42:23 -08:00
builtin-mktree.c
builtin-mv.c Let 'git <command> -h' show usage without a git dir 2009-11-10 12:00:21 -08:00
builtin-name-rev.c
builtin-pack-objects.c Merge branch 'maint' 2009-11-23 21:54:39 -08:00
builtin-pack-refs.c
builtin-prune-packed.c prune-packed: only show progress when stderr is a tty 2009-11-23 21:29:45 -08:00
builtin-prune.c
builtin-push.c Merge branch 'jk/maint-push-config' into maint 2009-11-15 23:07:17 -08:00
builtin-read-tree.c Let 'git <command> -h' show usage without a git dir 2009-11-10 12:00:21 -08:00
builtin-receive-pack.c Merge branch 'sp/smart-http' 2009-11-20 23:51:23 -08:00
builtin-reflog.c Let 'git <command> -h' show usage without a git dir 2009-11-10 12:00:21 -08:00
builtin-remote.c Merge branch 'th/maint-remote-update-help-string' into maint 2009-12-03 13:52:31 -08:00
builtin-replace.c
builtin-rerere.c Sync with 1.6.5.5 2009-12-05 11:39:13 -08:00
builtin-reset.c reset: improve worktree safety valves 2009-12-05 10:28:20 -08:00
builtin-rev-list.c Merge branch 'jc/log-stdin' 2009-11-23 22:30:08 -08:00
builtin-rev-parse.c Merge branch 'jn/help-everywhere' 2009-11-20 23:44:52 -08:00
builtin-revert.c
builtin-rm.c
builtin-send-pack.c Merge branch 'maint' 2009-11-23 21:54:39 -08:00
builtin-shortlog.c Merge branch 'uk/maint-shortlog-encoding' 2009-11-30 14:42:28 -08:00
builtin-show-branch.c Refactor pretty_print_commit arguments into a struct 2009-10-19 22:28:20 -07:00
builtin-show-ref.c Show usage string for 'git show-ref -h' 2009-11-09 17:08:53 -08:00
builtin-stripspace.c Show usage string for 'git stripspace -h' 2009-11-10 11:06:57 -08:00
builtin-symbolic-ref.c
builtin-tag.c
builtin-tar-tree.c Show usage string for 'git get-tar-commit-id -h' 2009-11-10 11:06:57 -08:00
builtin-unpack-objects.c
builtin-update-index.c Check the format of more printf-type functions 2009-11-15 18:24:58 -08:00
builtin-update-ref.c
builtin-update-server-info.c
builtin-upload-archive.c Merge branch 'np/maint-sideband-favor-status' into maint 2009-12-03 13:50:24 -08:00
builtin-verify-pack.c
builtin-verify-tag.c
builtin-write-tree.c
builtin.h Retire fetch--tool helper to contrib/examples 2009-11-09 17:08:44 -08:00
bundle.c Merge branch 'jc/log-stdin' 2009-11-23 22:30:08 -08:00
bundle.h
cache-tree.c
cache-tree.h
cache.h unpack-trees.c: prepare for looking ahead in the index 2010-01-07 14:59:54 -08:00
check-builtins.sh
check-racy.c
check_bindir
color.c
color.h Add a notice that only certain functions can print color escape codes 2009-11-27 00:28:40 -08:00
combine-diff.c Give the hunk comment its own color 2009-11-28 10:05:44 -08:00
command-list.txt Merge branch 'jh/notes' (early part) 2009-11-20 23:53:55 -08:00
commit.c Merge branch 'jh/notes' (early part) 2009-11-20 23:53:55 -08:00
commit.h Merge branch 'sp/smart-http' 2009-11-20 23:51:23 -08:00
config.c Merge branch 'mm/config-pathname-tilde-expand' 2009-11-22 16:28:38 -08:00
config.mak.in
configure.ac configure: add settings for gitconfig, editor and pager 2009-11-04 11:29:46 -08:00
connect.c Merge branch 'cc/replace' 2009-11-23 22:24:01 -08:00
convert.c
copy.c
csum-file.c
csum-file.h
ctype.c
daemon.c Merge branch 'tc/format-attribute' 2009-11-22 16:28:14 -08:00
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c unpack-trees.c: look ahead in the index 2010-01-07 15:00:14 -08:00
diff-no-index.c diff --no-index: make the usage string less scary 2009-11-10 12:00:21 -08:00
diff.c unpack-trees.c: look ahead in the index 2010-01-07 15:00:14 -08:00
diff.h unpack-trees.c: look ahead in the index 2010-01-07 15:00:14 -08:00
diffcore-break.c diffcore-break: save cnt_data for other phases 2009-11-16 13:21:12 -08:00
diffcore-delta.c Fix diff -B/--dirstat miscounting of newly added contents 2009-12-05 10:54:17 -08:00
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c diffcore-rename: reduce memory footprint by freeing blob data early 2009-11-20 22:13:47 -08:00
diffcore.h
dir.c
dir.h
editor.c Provide a build time default-editor setting 2009-11-13 12:20:54 -08:00
entry.c
environment.c Merge branch 'cc/replace' 2009-11-23 22:24:01 -08:00
exec_cmd.c
exec_cmd.h
fast-import.c Merge branch 'jh/notes' (early part) 2009-11-20 23:53:55 -08:00
fetch-pack.h Smart fetch over HTTP: client side 2009-11-04 17:58:15 -08:00
fixup-builtins
fsck.c
fsck.h Check the format of more printf-type functions 2009-11-15 18:24:58 -08:00
generate-cmdlist.sh
git-add--interactive.perl Merge branch 'maint' 2009-12-08 22:47:09 -08:00
git-am.sh Merge branch 'jc/maint-am-keep' into maint 2009-12-03 13:54:03 -08:00
git-archimport.perl
git-bisect.sh Merge branch 'rs/work-around-grep-opt-insanity' 2009-11-25 11:45:07 -08:00
git-compat-util.h Introduce usagef() that takes a printf-style format 2009-11-10 12:00:21 -08:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-difftool.perl
git-filter-branch.sh Merge branch 'rs/work-around-grep-opt-insanity' 2009-11-25 11:45:07 -08:00
git-instaweb.sh Merge branch 'rs/work-around-grep-opt-insanity' into maint 2009-12-03 13:53:58 -08:00
git-lost-found.sh
git-merge-octopus.sh Use 'fast-forward' all over the place 2009-10-24 23:50:28 -07:00
git-merge-one-file.sh Show usage string for 'git merge-one-file -h' 2009-11-10 11:06:57 -08:00
git-merge-resolve.sh
git-mergetool--lib.sh Merge branch 'rs/work-around-grep-opt-insanity' 2009-11-25 11:45:07 -08:00
git-mergetool.sh
git-notes.sh Teach "-m <msg>" and "-F <file>" to "git notes edit" 2009-10-19 18:59:43 -07:00
git-parse-remote.sh
git-pull.sh Merge branch 'maint' 2009-12-08 22:47:09 -08:00
git-quiltimport.sh
git-rebase--interactive.sh Merge branch 'maint' 2009-12-19 23:20:16 -08:00
git-rebase.sh Merge branch 'rs/work-around-grep-opt-insanity' 2009-11-25 11:45:07 -08:00
git-relink.perl
git-repack.sh
git-request-pull.sh
git-send-email.perl Merge branch 'fc/send-email-envelope' 2009-11-30 14:42:50 -08:00
git-sh-setup.sh Merge branch 'rs/work-around-grep-opt-insanity' 2009-11-25 11:45:07 -08:00
git-stash.sh stash list: drop the default limit of 10 stashes 2009-10-19 22:28:26 -07:00
git-submodule.sh Merge branch 'rs/work-around-grep-opt-insanity' 2009-11-25 11:45:07 -08:00
git-svn.perl git svn: branch/tag commands detect username in URLs 2009-12-23 11:58:05 -08:00
git-web--browse.sh
git.c Merge branch 'cc/replace' 2009-11-23 22:24:01 -08:00
git.spec.in
graph.c
graph.h Documentation: undocument gc'd function graph_release() 2009-11-19 23:05:17 -08:00
grep.c grep: Allow case insensitive search of fixed-strings 2009-11-16 16:06:46 -08:00
grep.h grep: Allow case insensitive search of fixed-strings 2009-11-16 16:06:46 -08:00
hash-object.c
hash.c
hash.h
help.c help.autocorrect: do not run a command if the command given is junk 2009-12-15 16:21:51 -08:00
help.h
http-backend.c http-backend: Let gcc check the format of more printf-type functions. 2009-11-15 22:15:01 -08:00
http-fetch.c Let 'git http-fetch -h' show usage outside any git repository 2009-11-10 11:11:21 -08:00
http-push.c Disable CURLOPT_NOBODY before enabling CURLOPT_PUT and CURLOPT_POST 2009-11-22 22:56:54 -08:00
http-walker.c
http.c Smart push over HTTP: client side 2009-11-04 17:58:15 -08:00
http.h Smart push over HTTP: client side 2009-11-04 17:58:15 -08:00
ident.c Suppress warnings from "git var -l" 2009-11-13 12:16:30 -08:00
imap-send.c Merge branch 'tc/format-attribute' 2009-11-22 16:28:14 -08:00
index-pack.c Let 'git <command> -h' show usage without a git dir 2009-11-10 12:00:21 -08:00
levenshtein.c
levenshtein.h
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c Introduce new pretty formats %g[sdD] for reflog information 2009-10-19 22:28:26 -07:00
log-tree.h
mailmap.c
mailmap.h
match-trees.c
merge-file.c
merge-index.c
merge-recursive.c Merge branch 'mm/maint-merge-ff-error-message-fix' into maint 2009-12-08 22:42:23 -08:00
merge-recursive.h merge-recursive: make the error-message generation an extern function 2009-11-29 23:52:31 -08:00
merge-tree.c
mktag.c
name-hash.c
notes.c Fix crasher on encountering SHA1-like non-note in notes tree 2009-12-03 10:10:35 -08:00
notes.h Teach notes code to free its internal data structures on request 2009-10-19 19:00:24 -07:00
object.c
object.h
pack-check.c
pack-redundant.c Let 'git <command> -h' show usage without a git dir 2009-11-10 12:00:21 -08:00
pack-refs.c
pack-refs.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c Provide a build time default-pager setting 2009-11-13 12:20:56 -08:00
parse-options.c
parse-options.h
patch-delta.c
patch-id.c
patch-ids.c
patch-ids.h
path.c Merge branch 'mm/config-pathname-tilde-expand' 2009-11-22 16:28:38 -08:00
pkt-line.c pkt-line: Make packet_read_line easier to debug 2009-10-30 19:20:53 -07:00
pkt-line.h pkt-line: Add strbuf based functions 2009-10-30 19:20:53 -07:00
preload-index.c
pretty.c Merge branch 'jc/pretty-lf' 2009-11-30 14:44:22 -08:00
progress.c
progress.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c
reflog-walk.c Introduce new pretty formats %g[sdD] for reflog information 2009-10-19 22:28:26 -07:00
reflog-walk.h Introduce new pretty formats %g[sdD] for reflog information 2009-10-19 22:28:26 -07:00
refs.c teach warn_dangling_symref to take a FILE argument 2009-11-10 01:01:47 -08:00
refs.h teach warn_dangling_symref to take a FILE argument 2009-11-10 01:01:47 -08:00
remote-curl.c remote-curl.c: fix rpc_out() 2009-11-23 21:25:55 -08:00
remote.c Merge branch 'bg/fetch-multi' 2009-11-23 00:03:15 -08:00
remote.h remote: refactor some logic into get_stale_heads() 2009-11-10 01:01:22 -08:00
replace_object.c
rerere.c
rerere.h
revision.c Merge branch 'jc/log-stdin' 2009-11-23 22:30:08 -08:00
revision.h Merge branch 'jc/log-stdin' 2009-11-23 22:30:08 -08:00
run-command.c
run-command.h
send-pack.h Smart push over HTTP: client side 2009-11-04 17:58:15 -08:00
server-info.c
setup.c Merge branch 'maint' to sync with 1.6.5.7 2009-12-16 12:47:15 -08:00
sha1-lookup.c
sha1-lookup.h
sha1_file.c Fix incorrect error check while reading deflated pack data 2009-10-21 23:19:47 -07:00
sha1_name.c
shallow.c
shell.c
shortlog.h
show-index.c Show usage string for 'git show-index -h' 2009-11-10 11:06:57 -08:00
sideband.c Smart push over HTTP: client side 2009-11-04 17:58:15 -08:00
sideband.h
sigchain.c
sigchain.h
strbuf.c
strbuf.h Check the format of more printf-type functions 2009-11-15 18:24:58 -08:00
string-list.c
string-list.h
submodule.c submodule.c: Squelch a "use before assignment" warning 2009-11-20 21:58:11 -08:00
submodule.h Add the --submodule option to the diff option family 2009-10-19 22:31:00 -07:00
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-genrandom.c
test-match-trees.c
test-parse-options.c
test-path-utils.c
test-sha1.c
test-sha1.sh
test-sigchain.c
thread-utils.c
thread-utils.h
trace.c
transport-helper.c remote-helpers: return successfully if everything up-to-date 2009-10-30 19:20:54 -07:00
transport.c Merge branch 'sp/smart-http' 2009-11-20 23:51:23 -08:00
transport.h fetch: Allow transport -v -v -v to set verbosity to 3 2009-10-30 19:20:54 -07:00
tree-diff.c
tree-walk.c traverse_trees(): handle D/F conflict case sanely 2010-01-03 23:21:32 -08:00
tree-walk.h
tree.c
tree.h
unimplemented.sh
unpack-file.c Show usage string for 'git unpack-file -h' 2009-11-10 11:06:57 -08:00
unpack-trees.c unpack-trees.c: look ahead in the index 2010-01-07 15:00:14 -08:00
unpack-trees.h unpack-trees.c: prepare for looking ahead in the index 2010-01-07 14:59:54 -08:00
upload-pack.c Sync with 1.6.5.6 2009-12-10 16:20:59 -08:00
usage.c Fix truncated usage messages 2009-11-22 16:14:48 -08:00
userdiff.c
userdiff.h
utf8.c strbuf_add_wrapped_text(): skip over colour codes 2009-11-23 15:36:07 -08:00
utf8.h Add strbuf_add_wrapped_text() to utf8.[ch] 2009-10-19 00:57:29 -07:00
var.c Teach git var about GIT_PAGER 2009-11-13 12:20:47 -08:00
walker.c
walker.h
wrapper.c
write_or_die.c
ws.c
wt-status.c
wt-status.h
xdiff-interface.c
xdiff-interface.h

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.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

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. 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://marc.theaimsgroup.com/?l=git and other archival sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.