{"thread":{"id":"37191","subject":"What's cooking in git.git (Jul 2014, #04; Tue, 22)","startedAt":"2014-07-22T21:44:23Z","lastAt":"2014-08-27T13:08:23Z","messageCount":19,"participants":["Junio C Hamano","Philip Oakley","Karsten Blees","Duy Nguyen"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"246530","messageId":"xmqq4my9f4qw.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":null,"subject":"What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-07-22T21:44:23Z","receivedAt":"2014-07-22T21:44:23Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Here are the topics that have been cooking.  Commits prefixed with\n'-' are only in 'pu' (proposed updates) while commits prefixed with\n'+' are in 'next'.\n\nWe would need to start slowing down to prepare for -rc0 preview at\nthe end of this week and then feature freeze.  Some topics that\njoined 'next' late may want to stay there for the remainder of this\ncycle.  Many of the accumulated fixes have been flushed to 'maint'\nand Git 2.0.2 has been tagged.\n\nYou can find the changes described here in the integration branches\nof the repositories listed at\n\n    http://git-blame.blogspot.com/p/git-public-repositories.html\n\n--------------------------------------------------\n[Graduated to \"master\"]\n\n* ak/profile-feedback-build (2014-07-08) 4 commits\n  (merged to 'next' on 2014-07-14 at c40e86e)\n + Fix profile feedback with -jN and add profile-fast\n + Run the perf test suite for profile feedback too\n + Don't define away __attribute__ on gcc\n + Use BASIC_FLAGS for profile feedback\n\n The support for the profile-feedback build, which has been left\n bit-rotten for quite a while, has been updated.\n\n\n* cc/for-each-mergetag (2014-07-07) 1 commit\n  (merged to 'next' on 2014-07-15 at c5dd3ee)\n + commit: add for_each_mergetag()\n (this branch is used by cc/replace-graft.)\n\n\n* ek/alt-odb-entry-fix (2014-07-15) 1 commit\n  (merged to 'next' on 2014-07-17 at a5f43e2)\n + sha1_file: do not add own object directory as alternate\n\n\n* jk/alloc-commit-id (2014-07-13) 8 commits\n  (merged to 'next' on 2014-07-16 at f14c01a)\n + diff-tree: avoid lookup_unknown_object\n + object_as_type: set commit index\n + alloc: factor out commit index\n + add object_as_type helper for casting objects\n + parse_object_buffer: do not set object type\n + move setting of object->type to alloc_* functions\n + alloc: write out allocator definitions\n + alloc.c: remove the alloc_raw_commit_node() function\n\n Make sure all in-core commit objects are assigned a unique number\n so that they can be annotated using the commit-slab API.\n\n\n* jk/remote-curl-squelch-extra-errors (2014-07-10) 3 commits\n  (merged to 'next' on 2014-07-14 at a2efa2f)\n + remote-curl: mark helper-protocol errors more clearly\n + remote-curl: use error instead of fprintf(stderr)\n + remote-curl: do not complain on EOF from parent git\n\n Show HTTP transfer errors from remote-curl helper more clearly to\n help avoid user confusion.\n\n\n* jl/submodule-tests (2014-07-14) 14 commits\n  (merged to 'next' on 2014-07-14 at 0c750bb)\n + revert: add t3513 for submodule updates\n + stash: add t3906 for submodule updates\n + am: add t4255 for submodule updates\n + cherry-pick: add t3512 for submodule updates\n + pull: add t5572 for submodule updates\n + rebase: add t3426 for submodule updates\n + merge: add t7613 for submodule updates\n + bisect: add t6041 for submodule updates\n + reset: add t7112 for submodule updates\n + read-tree: add t1013 for submodule updates\n + apply: add t4137 for submodule updates\n + checkout: call the new submodule update test framework\n + submodules: add the lib-submodule-update.sh test library\n + test-lib: add test_dir_is_empty()\n\n\n* kb/avoid-fchmod-for-now (2014-07-16) 1 commit\n  (merged to 'next' on 2014-07-17 at fc26c4b)\n + config: use chmod() instead of fchmod()\n\n Replace the only two uses of fchmod() with chmod() because the\n former does not work on Windows port and because luckily we can.\n\n\n* kb/hashmap-updates (2014-07-07) 4 commits\n  (merged to 'next' on 2014-07-15 at 6dd6611)\n + hashmap: add string interning API\n + hashmap: add simplified hashmap_get_from_hash() API\n + hashmap: improve struct hashmap member documentation\n + hashmap: factor out getting a hash code from a SHA1\n\n\n* kb/perf-trace (2014-07-13) 17 commits\n  (merged to 'next' on 2014-07-15 at 09ade08)\n + api-trace.txt: add trace API documentation\n + progress: simplify performance measurement by using getnanotime()\n + wt-status: simplify performance measurement by using getnanotime()\n + git: add performance tracing for git's main() function to debug scripts\n + trace: add trace_performance facility to debug performance issues\n + trace: add high resolution timer function to debug performance issues\n + trace: add 'file:line' to all trace output\n + trace: move code around, in preparation to file:line output\n + trace: add current timestamp to all trace output\n + trace: disable additional trace output for unit tests\n + trace: add infrastructure to augment trace output with additional info\n + sha1_file: change GIT_TRACE_PACK_ACCESS logging to use trace API\n + Documentation/git.txt: improve documentation of 'GIT_TRACE*' variables\n + trace: improve trace performance\n + trace: remove redundant printf format attribute\n + trace: consistently name the format parameter\n + trace: move trace declarations from cache.h to new trace.h\n\n Show timestamps in GIT_TRACE output.\n\n\n* nd/path-max-must-go (2014-07-14) 3 commits\n  (merged to 'next' on 2014-07-15 at ce68dde)\n + prep_exclude: remove the artificial PATH_MAX limit\n + dir.h: move struct exclude declaration to top level\n + dir.c: coding style fix\n\n Lift arbitrary PATH_MAX limit in the code to enumerate paths in the\n working tree.\n\n\n* rs/code-cleaning (2014-07-18) 7 commits\n  (merged to 'next' on 2014-07-21 at 7312ddc)\n + remote-testsvn: use internal argv_array of struct child_process in cmd_import()\n + bundle: use internal argv_array of struct child_process in create_bundle()\n + fast-import: use hashcmp() for SHA1 hash comparison\n + transport: simplify fetch_objs_via_rsync() using argv_array\n + run-command: use internal argv_array of struct child_process in run_hook_ve()\n + use commit_list_count() to count the members of commit_lists\n + strbuf: use strbuf_addstr() for adding C strings\n\n\n* rs/ref-transaction-0 (2014-07-14) 19 commits\n  (merged to 'next' on 2014-07-14 at b21bcee)\n + refs.c: change ref_transaction_update() to do error checking and return status\n + refs.c: remove the onerr argument to ref_transaction_commit\n + update-ref: use err argument to get error from ref_transaction_commit\n + refs.c: make update_ref_write update a strbuf on failure\n + refs.c: make ref_update_reject_duplicates take a strbuf argument for errors\n + refs.c: log_ref_write should try to return meaningful errno\n + refs.c: make resolve_ref_unsafe set errno to something meaningful on error\n + refs.c: commit_packed_refs to return a meaningful errno on failure\n + refs.c: make remove_empty_directories always set errno to something sane\n + refs.c: verify_lock should set errno to something meaningful\n + refs.c: make sure log_ref_setup returns a meaningful errno\n + refs.c: add an err argument to repack_without_refs\n + lockfile.c: make lock_file return a meaningful errno on failurei\n + lockfile.c: add a new public function unable_to_lock_message\n + refs.c: add a strbuf argument to ref_transaction_commit for error logging\n + refs.c: allow passing NULL to ref_transaction_free\n + refs.c: constify the sha arguments for ref_transaction_create|delete|update\n + refs.c: ref_transaction_commit should not free the transaction\n + refs.c: remove ref_transaction_rollback\n (this branch is used by rs/ref-transaction and rs/ref-transaction-1.)\n\n Early part of the \"ref transaction\" topic.\n\n\n* rs/unify-is-branch (2014-07-16) 1 commit\n  (merged to 'next' on 2014-07-17 at 55f530b)\n + refs.c: add a public is_branch function\n\n\n* sk/mingw-uni-fix (2014-07-15) 2 commits\n  (merged to 'next' on 2014-07-17 at ffef7a1)\n + Win32: Unicode file name support (dirent)\n + Win32: Unicode file name support (except dirent)\n (this branch is used by sk/mingw-uni-fix-more.)\n\n--------------------------------------------------\n[New Topics]\n\n* mb/local-clone-after-applying-insteadof (2014-07-17) 1 commit\n  (merged to 'next' on 2014-07-21 at ebe07c2)\n + use local cloning if insteadOf makes a local URL\n\n Apply the \"if cloning from a local disk, physically copy repository\n using hardlinks, unless otherwise told not to with --no-local\"\n optimization when url.*.insteadOf mechanism rewrites a \"git clone\n $URL\" that refers to a repository over the network to a clone from\n a local disk.\n\n Will merge to 'master'.\n\n\n* nd/path-max-is-better-than-hardcoded-magic-1024 (2014-07-17) 1 commit\n - abspath.c: use PATH_MAX in real_path_internal()\n\n Still being discussed.\n\n\n* sk/mingw-uni-fix-more (2014-07-21) 14 commits\n - Win32: enable color output in Windows cmd.exe\n - Win32: patch Windows environment on startup\n - Win32: keep the environment sorted\n - Win32: use low-level memory allocation during initialization\n - Win32: reduce environment array reallocations\n - Win32: don't copy the environment twice when spawning child processes\n - Win32: factor out environment block creation\n - Win32: unify environment function names\n - Win32: unify environment case-sensitivity\n - Win32: fix environment memory leaks\n - Win32: Unicode environment (incoming)\n - Win32: Unicode environment (outgoing)\n - Revert \"Windows: teach getenv to do a case-sensitive search\"\n - tests: do not pass iso8859-1 encoded parameter\n\n Most of these are battle-tested in msysgit and are needed to\n complete what has been merged to 'master' already.\n\n A fix has been squashed into \"Unicode environ (outgoing)\"; is this\n now ready to go?\n\n\n* sk/mingw-tests-workaround (2014-07-21) 6 commits\n - t800[12]: work around MSys limitation\n - t9902: mingw-specific fix for gitfile link files\n - t4210: skip command-line encoding tests on mingw\n - MinGW: disable legacy encoding tests\n - t0110/MinGW: skip tests that pass arbitrary bytes on the command line\n - MinGW: Skip test redirecting to fd 4\n (this branch is used by jc/not-mingw-cygwin.)\n\n Make tests pass on msysgit by mostly disabling ones that are\n infeasible on that platform.\n\n The t0110 one has been replaced; is this now ready to go?\n\n\n* ta/string-list-init (2014-07-21) 2 commits\n  (merged to 'next' on 2014-07-21 at 63e8891)\n + replace memset with string-list initializers\n + string-list: add string_list initializer helper function\n (this branch is tangled with ta/config-set.)\n\n Will merge to 'master'.\n\n\n* cb/mergetool-difftool (2014-07-21) 2 commits\n - difftool: don't assume that default sh is sane\n - mergetool: don't require a work tree for --tool-help\n\n\n* rs/fix-unlink-unix-socket (2014-07-21) 1 commit\n  (merged to 'next' on 2014-07-22 at fad8c29)\n + unix-socket: remove stale socket before calling chdir()\n\n The unix-domain socket used by the sample credential cache daemon\n tried to unlink an existing stale one at a wrong path, if the path\n to the socket was given as an overlong path that does not fit in\n sun_path member of the sockaddr_un structure.\n\n Will merge to 'master'.\n\n\n* rs/strbuf-getcwd (2014-07-21) 4 commits\n - use xgetcwd() get the current directory or die\n - wrapper: add xgetcwd()\n - use strbuf_getcwd() to get the current working directory without fixed-sized buffers\n - strbuf: add strbuf_getcwd()\n\n Still being discussed.\n\n\n* jc/not-mingw-cygwin (2014-07-21) 2 commits\n - test prerequisites: enumerate with commas\n - test prerequisites: eradicate NOT_FOO\n (this branch uses sk/mingw-tests-workaround.)\n\n We have been using NOT_{MINGW,CYGWIN} test prerequisites long\n before Peff invented support for negated prerequisites e.g. !MINGW\n and we still add more uses of the former.  Convert them to the\n latter to avoid confusion.\n\n\n* jk/more-push-completion (2014-07-22) 3 commits\n - completion: complete `git push --force-with-lease=`\n - completion: add some missing options to `git push`\n - completion: complete \"unstuck\" `git push --recurse-submodules`\n\n--------------------------------------------------\n[Stalled]\n\n* jk/tag-contains (2014-06-30) 8 commits\n . perf: add tests for tag --contains\n . tag: use commit_contains\n . commit: provide a fast multi-tip contains function\n . string-list: add pos to iterator callback\n . add functions for memory-efficient bitmaps\n . paint_down_to_common: use prio_queue\n . tag: factor out decision to stream tags\n . tag: allow --sort with -n\n\n Expecting a reroll.\n\n\n* ab/add-interactive-show-diff-func-name (2014-05-12) 2 commits\n - SQUASH??? git-add--interactive: Preserve diff heading when splitting hunks\n - git-add--interactive: Preserve diff heading when splitting hunks\n\n Waiting for a reroll.\n\n\n* jn/gitweb-utf8-in-links (2014-05-27) 1 commit\n - gitweb: Harden UTF-8 handling in generated links\n\n $gmane/250758?\n\n\n* rh/prompt-tests (2014-06-05) 11 commits\n - t9904: new __git_ps1 tests for Zsh\n - test-lib: make it possible to override how test code is eval'd\n - lib-prompt-tests.sh: add variable for string that encodes percent in PS1\n - lib-prompt-tests.sh: put all tests inside a function\n - t9903: move prompt tests to a new lib-prompt-tests.sh file\n - t9903: move PS1 color code variable definitions to lib-bash.sh\n - t9903: include \"Bash\" in test names via new $shellname var\n - t9903: run pc mode tests again with PS1 expansion disabled\n - t9903: move test name prefix to a separate variable\n - t9903: put the Bash pc mode prompt test cases in a function\n - t9903: remove Zsh test from the suite of Bash prompt tests\n\n Expecting a reroll to limit the damage to test_eval_; also reported\n to be broken with older zsh that are still in the field ($gmane/251231).\n\n\n* ss/userdiff-update-csharp-java (2014-06-02) 2 commits\n - userdiff: support Java try keyword\n - userdiff: support C# async methods and correct C# keywords\n\n Reviews sent; waiting for a response.\n\n\n* cc/interpret-trailers (2014-05-28) 11 commits\n - Documentation: add documentation for 'git interpret-trailers'\n - trailer: add tests for commands in config file\n - trailer: execute command from 'trailer.<name>.command'\n - trailer: add tests for \"git interpret-trailers\"\n - trailer: add interpret-trailers command\n - trailer: put all the processing together and print\n - trailer: parse trailers from file or stdin\n - trailer: process command line trailer arguments\n - trailer: read and process config information\n - trailer: process trailers from input message and arguments\n - trailer: add data structures and basic functions\n\n A new filter to programatically edit the tail end of the commit log\n messages.\n\n What is the status of this one?  I think I saw reviews by Michael\n but after that I do not recall seeing any updates.\n\n\n* mh/lockfile (2014-04-15) 25 commits\n . trim_last_path_elm(): replace last_path_elm()\n . resolve_symlink(): take a strbuf parameter\n . resolve_symlink(): use a strbuf for internal scratch space\n . change lock_file::filename into a strbuf\n . commit_lock_file(): use a strbuf to manage temporary space\n . try_merge_strategy(): use a statically-allocated lock_file object\n . try_merge_strategy(): remove redundant lock_file allocation\n . struct lock_file: declare some fields volatile\n . lockfile: avoid transitory invalid states\n . commit_lock_file(): die() if called for unlocked lockfile object\n . commit_lock_file(): inline temporary variable\n . remove_lock_file(): call rollback_lock_file()\n . lock_file(): exit early if lockfile cannot be opened\n . write_packed_entry_fn(): convert cb_data into a (const int *)\n . prepare_index(): declare return value to be (const char *)\n . delete_ref_loose(): don't muck around in the lock_file's filename\n . cache.h: define constants LOCK_SUFFIX and LOCK_SUFFIX_LEN\n . lockfile.c: document the various states of lock_file objects\n . lock_file(): always add lock_file object to lock_file_list\n . hold_lock_file_for_append(): release lock on errors\n . lockfile: unlock file if lockfile permissions cannot be adjusted\n . rollback_lock_file(): set fd to -1\n . rollback_lock_file(): do not clear filename redundantly\n . api-lockfile: expand the documentation\n . unable_to_lock_die(): rename function from unable_to_lock_index_die()\n\n Ejected from 'pu' to unclutter.\n Expecting a reroll.\n\n\n* bg/rebase-off-of-previous-branch (2014-04-16) 1 commit\n - git-rebase: print name of rev when using shorthand\n\n Teach \"git rebase -\" to report the concrete name of the branch\n (i.e. the previous one).\n\n But it stops short and does not do the same for \"git rebase @{-1}\".\n Expecting a reroll.\n\n\n* tr/merge-recursive-index-only (2014-02-05) 3 commits\n - merge-recursive: -Xindex-only to leave worktree unchanged\n - merge-recursive: internal flag to avoid touching the worktree\n - merge-recursive: remove dead conditional in update_stages()\n (this branch is used by tr/remerge-diff.)\n\n\n* tr/remerge-diff (2014-02-26) 5 commits\n . log --remerge-diff: show what the conflict resolution changed\n . name-hash: allow dir hashing even when !ignore_case\n . merge-recursive: allow storing conflict hunks in index\n . revision: fold all merge diff variants into an enum merge_diff_mode\n . combine-diff: do not pass revs->dense_combined_merges redundantly\n (this branch uses tr/merge-recursive-index-only.)\n\n \"log -p\" output learns a new way to let users inspect a merge\n commit by showing the differences between the automerged result\n with conflicts the person who recorded the merge would have seen\n and the final conflict resolution that was recorded in the merge.\n\n Needs to be rebased, now kb/fast-hashmap topic is in.\n\n\n* jk/makefile (2014-02-05) 16 commits\n . FIXUP\n . move LESS/LV pager environment to Makefile\n . Makefile: teach scripts to include make variables\n . FIXUP\n . Makefile: auto-build C strings from make variables\n . Makefile: drop *_SQ variables\n . FIXUP\n . Makefile: add c-quote helper function\n . Makefile: introduce sq function for shell-quoting\n . Makefile: always create files via make-var\n . Makefile: store GIT-* sentinel files in MAKE/\n . Makefile: prefer printf to echo for GIT-*\n . Makefile: use tempfile/mv strategy for GIT-*\n . Makefile: introduce make-var helper function\n . Makefile: fix git-instaweb dependency on gitweb\n . Makefile: drop USE_GETTEXT_SCHEME from GIT-CFLAGS\n\n Simplify the Makefile rules and macros that exist primarily for\n quoting purposes, and make it easier to robustly express the\n dependency rules.\n\n Expecting a reroll.\n\n\n* po/everyday-doc (2014-01-27) 1 commit\n - Make 'git help everyday' work\n\n This may make the said command to emit something, but the source is\n not meant to be formatted into a manual pages to begin with, and\n also its contents are a bit stale.  It may be a good first step in\n the right direction, but needs more work to at least get the\n mark-up right before public consumption.\n\n Will hold.\n\n\n* rb/merge-prepare-commit-msg-hook (2014-01-10) 4 commits\n - merge: drop unused arg from abort_commit method signature\n - merge: make prepare_to_commit responsible for write_merge_state\n - t7505: ensure cleanup after hook blocks merge\n - t7505: add missing &&\n\n Expose more merge states (e.g. $GIT_DIR/MERGE_MODE) to hooks that\n run during \"git merge\".  The log message stresses too much on one\n hook, prepare-commit-msg, but it would equally apply to other hooks\n like post-merge, I think.\n\n Waiting for a reroll.\n\n\n* jc/graph-post-root-gap (2013-12-30) 3 commits\n - WIP: document what we want at the end\n - graph: remove unused code a bit\n - graph: stuff the current commit into graph->columns[]\n\n This was primarily a RFH ($gmane/239580).\n\n\n* tg/perf-lib-test-perf-cleanup (2013-09-19) 2 commits\n - perf-lib: add test_perf_cleanup target\n - perf-lib: split starting the test from the execution\n\n Add test_perf_cleanup shell function to the perf suite, that allows\n the script writers to define a test with a clean-up action.\n\n Will hold.\n\n\n* jc/show-branch (2014-03-24) 5 commits\n - show-branch: use commit slab to represent bitflags of arbitrary width\n - show-branch.c: remove \"all_mask\"\n - show-branch.c: abstract out \"flags\" operation\n - show-branch.c: lift all_mask/all_revs to a global static\n - show-branch.c: update comment style\n\n Waiting for the final step to lift the hard-limit before sending it out.\n\n\n* jh/submodule-tests (2014-04-17) 1 commit\n - t7410: 210 tests for various 'git submodule update' scenarios\n\n More or less abandoned.  Will drop.\n\n--------------------------------------------------\n[Cooking]\n\n* jk/rebase-am-fork-point (2014-07-16) 2 commits\n  (merged to 'next' on 2014-07-22 at 7648293)\n + rebase: omit patch-identical commits with --fork-point\n + rebase--am: use --cherry-pick instead of --ignore-if-in-upstream\n\n \"git rebase --fork-point\" did not filter out patch-identical\n commits correctly.\n\n Will merge to 'master'.\n\n\n* jk/stable-prio-queue (2014-07-15) 4 commits\n  (merged to 'next' on 2014-07-22 at 46e9bc3)\n + t5539: update a flaky test\n + paint_down_to_common: use prio_queue\n + prio-queue: make output stable with respect to insertion\n + prio-queue: factor out compare and swap operations\n\n Will merge to 'master'.\n\n\n* jk/tag-sort (2014-07-17) 2 commits\n  (merged to 'next' on 2014-07-21 at bc34738)\n + tag: support configuring --sort via .gitconfig\n + tag: fix --sort tests to use cat<<-\\EOF format\n\n Will merge to 'master'.\n\n\n* ta/config-set (2014-07-21) 3 commits\n - test-config: add tests for the config_set API\n - add `config_set` API for caching config-like files\n + string-list: add string_list initializer helper function\n (this branch is tangled with ta/string-list-init.)\n\n Almost there.\n\n\n* rs/ref-transaction-1 (2014-07-16) 20 commits\n - refs.c: make delete_ref use a transaction\n - refs.c: make prune_ref use a transaction to delete the ref\n - refs.c: remove lock_ref_sha1\n - refs.c: remove the update_ref_write function\n - refs.c: remove the update_ref_lock function\n - refs.c: make lock_ref_sha1 static\n - walker.c: use ref transaction for ref updates\n - fast-import.c: use a ref transaction when dumping tags\n - receive-pack.c: use a reference transaction for updating the refs\n - refs.c: change update_ref to use a transaction\n - branch.c: use ref transaction for all ref updates\n - fast-import.c: change update_branch to use ref transactions\n - sequencer.c: use ref transactions for all ref updates\n - commit.c: use ref transactions for updates\n - replace.c: use the ref transaction functions for updates\n - tag.c: use ref transactions when doing updates\n - refs.c: add transaction.status and track OPEN/CLOSED/ERROR\n - refs.c: make ref_transaction_begin take an err argument\n - refs.c: update ref_transaction_delete to check for error and return status\n - refs.c: change ref_transaction_create to do error checking and return status\n (this branch is used by rs/ref-transaction.)\n\n The second batch of the transactional ref update series.\n\n\n* jc/reopen-lock-file (2014-07-14) 1 commit\n  (merged to 'next' on 2014-07-21 at 8277dc9)\n + lockfile: allow reopening a closed but still locked file\n\n Needed in the \"commit -p\" code path to update the cache tree in the\n index.\n\n\n* nd/multiple-work-trees (2014-07-17) 31 commits\n  (merged to 'next' on 2014-07-17 at a29d310)\n + checkout: don't require a work tree when checking out into a new one\n + git_path(): keep \"info/sparse-checkout\" per work-tree\n + count-objects: report unused files in $GIT_DIR/repos/...\n + gc: support prune --repos\n + gc: factor out gc.pruneexpire parsing code\n + gc: style change -- no SP before closing parenthesis\n + prune: strategies for linked checkouts\n + checkout: detach if the branch is already checked out elsewhere\n + checkout: clean up half-prepared directories in --to mode\n + checkout: support checking out into a new working directory\n + use new wrapper write_file() for simple file writing\n + wrapper.c: wrapper to open a file, fprintf then close\n + setup.c: support multi-checkout repo setup\n + setup.c: detect $GIT_COMMON_DIR check_repository_format_gently()\n + setup.c: convert check_repository_format_gently to use strbuf\n + setup.c: detect $GIT_COMMON_DIR in is_git_directory()\n + setup.c: convert is_git_directory() to use strbuf\n + git-stash: avoid hardcoding $GIT_DIR/logs/....\n + *.sh: avoid hardcoding $GIT_DIR/hooks/...\n + git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects\n + $GIT_COMMON_DIR: a new environment variable\n + commit: use SEQ_DIR instead of hardcoding \"sequencer\"\n + fast-import: use git_path() for accessing .git dir instead of get_git_dir()\n + reflog: avoid constructing .lock path with git_path\n + *.sh: respect $GIT_INDEX_FILE\n + git_path(): be aware of file relocation in $GIT_DIR\n + path.c: group git_path(), git_pathdup() and strbuf_git_path() together\n + path.c: rename vsnpath() to do_git_path()\n + git_snpath(): retire and replace with strbuf_git_path()\n + path.c: make get_pathname() call sites return const char *\n + path.c: make get_pathname() return strbuf instead of static buffer\n\n A replacement for contrib/workdir/git-new-workdir that does not\n rely on symbolic links and make sharing of objects and refs safer\n by making the borrowee and borrowers aware of each other.\n\n Will cook in 'next'.\n\n\n* dt/cache-tree-repair (2014-07-14) 4 commits\n  (merged to 'next' on 2014-07-21 at e83db34)\n + cache-tree: Write updated cache-tree after commit\n + cache-tree: subdirectory tests\n + test-dump-cache-tree: invalid trees are not errors\n + cache-tree: create/update cache-tree on checkout\n\n Add a few more places in \"commit\" and \"checkout\" that make sure\n that the cache-tree is fully populated in the index.\n\n Will cook in 'next'.\n\n\n* cc/replace-graft (2014-07-21) 9 commits\n  (merged to 'next' on 2014-07-22 at 9b14090)\n + replace: add test for --graft with a mergetag\n + replace: check mergetags when using --graft\n + replace: add test for --graft with signed commit\n + replace: remove signature when using --graft\n + contrib: add convert-grafts-to-replace-refs.sh\n + Documentation: replace: add --graft option\n + replace: add test for --graft\n + replace: add --graft option\n + replace: cleanup redirection style in tests\n\n \"git replace\" learned a \"--graft\" option to rewrite parents of a\n commit.\n\n Will merge to 'master'.\n\n\n* hv/submodule-config (2014-06-30) 4 commits\n  (merged to 'next' on 2014-07-17 at 5e0ce45)\n + do not die on error of parsing fetchrecursesubmodules option\n + use new config API for worktree configurations of submodules\n + extract functions for submodule config set and lookup\n + implement submodule config cache for lookup of submodule names\n\n Will cook in 'next'.\n\n\n* rs/ref-transaction (2014-07-17) 12 commits\n - refs.c: fix handling of badly named refs\n - refs.c: make write_ref_sha1 static\n - fetch.c: change s_update_ref to use a ref transaction\n - refs.c: propagate any errno==ENOTDIR from _commit back to the callers\n - refs.c: pass a skip list to name_conflict_fn\n - refs.c: call lock_ref_sha1_basic directly from commit\n - refs.c: move the check for valid refname to lock_ref_sha1_basic\n - refs.c: pass NULL as *flags to read_ref_full\n - refs.c: pass the ref log message to _create/delete/update instead of _commit\n - refs.c: add an err argument to delete_ref_loose\n - wrapper.c: add a new function unlink_or_msg\n - wrapper.c: simplify warn_if_unremovable\n (this branch uses rs/ref-transaction-1.)\n\n\n* jc/test-lazy-prereq (2014-06-13) 1 commit\n - tests: drop GIT_*_TIMING_TESTS environment variable support\n\n Test-script clean-up.\n\n Will hold.\n\n\n* mt/patch-id-stable (2014-06-10) 1 commit\n - patch-id: change default to stable\n\n Teaches \"git patch-id\" to compute the patch ID that does not change\n when the files in a single patch is reordered. As this new algorithm\n is backward incompatible, the last bit to flip it to be the default\n is left out of 'master' for now.\n\n Will hold.\n"},{"id":"246542","messageId":"B6FB0C239E6E4E2489FAB9EF1C902988@PhilipOakley","threadId":"37191","inReplyTo":"xmqq4my9f4qw.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Philip Oakley","fromEmail":"philipoakley@iee.org","sentAt":"2014-07-23T06:56:52Z","receivedAt":"2014-07-23T06:56:52Z","isPatch":false,"sender":{"key":"philipoakley@iee.email","avatar":"https://avatars.githubusercontent.com/u/914343?v=4"},"body":"From: \"Junio C Hamano\" <gitster@pobox.com>\n> --------------------------------------------------\n> [Stalled]\n>\n>\n> * po/everyday-doc (2014-01-27) 1 commit\n> - Make 'git help everyday' work\n>\n> This may make the said command to emit something, but the source is\n> not meant to be formatted into a manual pages to begin with, and\n> also its contents are a bit stale.\n\n> It may be a good first step in\n> the right direction, but needs more work to at least get the\n> mark-up right before public consumption.\n>\n> Will hold.\n>\n\nIt's not clear to me which bits of mark-up are 'wrong' and must be \nreworked,\nand which markup styles are just unusal and could wait until better eyes \ncan\nreview the detailed content.\n\nAt the moment I'm guessing as to what changes to do, and falling down \nvarious\nAsciidoc rabbit holes. I'd judged my initial changes as 'adequate' \nrather than\n'good' because of that issue.\n\nPhilip\n-- \n"},{"id":"246561","messageId":"53CFC414.1010601@gmail.com","threadId":"37191","inReplyTo":"xmqq4my9f4qw.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Karsten Blees","fromEmail":"karsten.blees@gmail.com","sentAt":"2014-07-23T14:17:56Z","receivedAt":"2014-07-23T14:17:56Z","isPatch":false,"sender":{"key":"karsten.blees@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1111200?v=4"},"body":"Am 22.07.2014 23:44, schrieb Junio C Hamano:\n> \n> * sk/mingw-uni-fix-more (2014-07-21) 14 commits\n>  - Win32: enable color output in Windows cmd.exe\n>  - Win32: patch Windows environment on startup\n>  - Win32: keep the environment sorted\n>  - Win32: use low-level memory allocation during initialization\n>  - Win32: reduce environment array reallocations\n>  - Win32: don't copy the environment twice when spawning child processes\n>  - Win32: factor out environment block creation\n>  - Win32: unify environment function names\n>  - Win32: unify environment case-sensitivity\n>  - Win32: fix environment memory leaks\n>  - Win32: Unicode environment (incoming)\n>  - Win32: Unicode environment (outgoing)\n>  - Revert \"Windows: teach getenv to do a case-sensitive search\"\n>  - tests: do not pass iso8859-1 encoded parameter\n> \n>  Most of these are battle-tested in msysgit and are needed to\n>  complete what has been merged to 'master' already.\n> \n>  A fix has been squashed into \"Unicode environ (outgoing)\"; is this\n>  now ready to go?\n> \n> \n> * sk/mingw-tests-workaround (2014-07-21) 6 commits\n>  - t800[12]: work around MSys limitation\n>  - t9902: mingw-specific fix for gitfile link files\n>  - t4210: skip command-line encoding tests on mingw\n>  - MinGW: disable legacy encoding tests\n>  - t0110/MinGW: skip tests that pass arbitrary bytes on the command line\n>  - MinGW: Skip test redirecting to fd 4\n>  (this branch is used by jc/not-mingw-cygwin.)\n> \n>  Make tests pass on msysgit by mostly disabling ones that are\n>  infeasible on that platform.\n> \n>  The t0110 one has been replaced; is this now ready to go?\n> \n\nYes, I think both series are ready.\n\nCompiles with msysgit and MSVC (with NO_CURL=1).\n\nWith the version in pu, three tests fail. t7001 is fixed with a newer 'cp'.\nThe other two are unrelated (introduced by nd/multiple-work-trees topic).\n\n* t1501-worktree: failed 1\n  As of 5bbcb072 \"setup.c: support multi-checkout repo setup\"\n  Using $TRASH_DIRECTORY doesn't work on Windows.\n  \n* t2026-prune-linked-checkouts: failed 1\n  As of 404a45f1 \"prune: strategies for linked checkouts\"\n  Dito.\n\n* t7001-mv: failed 6\n  'cp -P' doesn't work due to outdated cp.exe.\n"},{"id":"246582","messageId":"xmqqegxcdjzl.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":"B6FB0C239E6E4E2489FAB9EF1C902988@PhilipOakley","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-07-23T18:10:22Z","receivedAt":"2014-07-23T18:10:22Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Philip Oakley\" <philipoakley@iee.org> writes:\n\n>> * po/everyday-doc (2014-01-27) 1 commit\n>> - Make 'git help everyday' work\n>>\n>> This may make the said command to emit something, but the source is\n>> not meant to be formatted into a manual pages to begin with, and\n>> also its contents are a bit stale.\n>\n>> It may be a good first step in\n>> the right direction, but needs more work to at least get the\n>> mark-up right before public consumption.\n>>\n>> Will hold.\n>>\n>\n> It's not clear to me which bits of mark-up are 'wrong' and must be\n> reworked,\n\nIt's been too long since I wrote the above and I left it without\nupdates (these comments are by default carried over from one issue\nto the next of \"What's cooking\" report, unless there is some\ndevelopment on the topic).  Now I read the output (admittedly, I\nskimmed only the HTML version), I think the formatting / mark-up is\nfine.\n\nI at the same time found various command sequences used there are\nrather classical and there are better ways to do the same with\nmodern tools, which still makes me feel hesitant to promote this\ndocument without updating its contents, though.\n"},{"id":"246583","messageId":"xmqqa980djbd.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":"53CFC414.1010601@gmail.com","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-07-23T18:24:54Z","receivedAt":"2014-07-23T18:24:54Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Karsten Blees <karsten.blees@gmail.com> writes:\n\n> Am 22.07.2014 23:44, schrieb Junio C Hamano:\n>> \n>> * sk/mingw-uni-fix-more (2014-07-21) 14 commits\n>> ...\n>> * sk/mingw-tests-workaround (2014-07-21) 6 commits\n>> ...\n>\n> Yes, I think both series are ready.\n>\n> Compiles with msysgit and MSVC (with NO_CURL=1).\n\nThanks.\n\n> With the version in pu, three tests fail. t7001 is fixed with a newer 'cp'.\n\nIt seems that the only use of the \"copy symlinks as-is\" in that test\nare to move trash/submodule/.git to trash/.git/modules/submodule;\nas the longer-term direction is not to rely on symlinks in .git/\n(and we have got rid of HEAD -> refs/heads/master long time ago),\nperhaps we do not even want to have \"-P\" there?\n\n> The other two are unrelated (introduced by nd/multiple-work-trees topic).\n>\n> * t1501-worktree: failed 1\n>   As of 5bbcb072 \"setup.c: support multi-checkout repo setup\"\n>   Using $TRASH_DIRECTORY doesn't work on Windows.\n>   \n> * t2026-prune-linked-checkouts: failed 1\n>   As of 404a45f1 \"prune: strategies for linked checkouts\"\n>   Dito.\n>\n> * t7001-mv: failed 6\n>   'cp -P' doesn't work due to outdated cp.exe.\n"},{"id":"246673","messageId":"7ACC0F5AD23E4C839D2F819B23DA9564@PhilipOakley","threadId":"37191","inReplyTo":"xmqqegxcdjzl.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Philip Oakley","fromEmail":"philipoakley@iee.org","sentAt":"2014-07-24T22:37:00Z","receivedAt":"2014-07-24T22:37:00Z","isPatch":false,"sender":{"key":"philipoakley@iee.email","avatar":"https://avatars.githubusercontent.com/u/914343?v=4"},"body":"From: \"Junio C Hamano\" <gitster@pobox.com>\nSent: Wednesday, July 23, 2014 7:10 PM\n> \"Philip Oakley\" <philipoakley@iee.org> writes:\n>\n>>> * po/everyday-doc (2014-01-27) 1 commit\n>>> - Make 'git help everyday' work\n>>>\n>>> This may make the said command to emit something, but the source is\n>>> not meant to be formatted into a manual pages to begin with, and\n>>> also its contents are a bit stale.\n>>\n>>> It may be a good first step in\n>>> the right direction, but needs more work to at least get the\n>>> mark-up right before public consumption.\n>>>\n>>> Will hold.\n>>>\n>>\n>> It's not clear to me which bits of mark-up are 'wrong' and must be\n>> reworked,\n>\n> It's been too long since I wrote the above and I left it without\n> updates (these comments are by default carried over from one issue\n> to the next of \"What's cooking\" report, unless there is some\n> development on the topic).  Now I read the output (admittedly, I\n> skimmed only the HTML version), I think the formatting / mark-up is\n> fine.\n\nThanks for the clarification - I hadn't been sure which way to go on the \nformatting aspect.\n>\n> I at the same time found various command sequences used there are\n> rather classical and there are better ways to do the same with\n> modern tools,\n\nI can have a look at the 'standalone' and 'participant' developer \ncommand lists but would shy away from any claims about the 'integrator' \nand 'administrator' roles ;-)\n\n> which still makes me feel hesitant to promote this\n> document without updating its contents, though.\n>\n\nI hadn't viewed it as a 'promotion', rather it was simply ensuring \naccess to the guide via the help system, instead of leaving it somewhat \nhidden.\n\n--\nPhilip \n"},{"id":"246674","messageId":"xmqqvbqm74v7.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":"7ACC0F5AD23E4C839D2F819B23DA9564@PhilipOakley","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-07-24T22:45:48Z","receivedAt":"2014-07-24T22:45:48Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Philip Oakley\" <philipoakley@iee.org> writes:\n\n>> which still makes me feel hesitant to promote this\n>> document without updating its contents, though.\n>>\n>\n> I hadn't viewed it as a 'promotion', rather it was simply ensuring\n> access to the guide via the help system, instead of leaving it\n> somewhat hidden.\n\nStale or incorrect pieces of advice that are hidden will not harm\n(non-)readers.  Making them more available would mean giving them\nmore chances to do harm ;-).\n"},{"id":"246690","messageId":"CACsJy8DqdTWqVimK0o4rcBXL==iZCsu1OgX2W9ZbgebcSDaKxg@mail.gmail.com","threadId":"37191","inReplyTo":"53CFC414.1010601@gmail.com","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Duy Nguyen","fromEmail":"pclouds@gmail.com","sentAt":"2014-07-25T12:30:16Z","receivedAt":"2014-07-25T12:30:16Z","isPatch":false,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, Jul 23, 2014 at 9:17 PM, Karsten Blees <karsten.blees@gmail.com> wrote:\n> With the version in pu, three tests fail. t7001 is fixed with a newer 'cp'.\n> The other two are unrelated (introduced by nd/multiple-work-trees topic).\n>\n> * t1501-worktree: failed 1\n>   As of 5bbcb072 \"setup.c: support multi-checkout repo setup\"\n>   Using $TRASH_DIRECTORY doesn't work on Windows.\n>\n> * t2026-prune-linked-checkouts: failed 1\n>   As of 404a45f1 \"prune: strategies for linked checkouts\"\n>   Dito.\n\nI need your help here. Would saving $(pwd) to a variable and using it\ninstead of $TRASH_DIRECTORY work? Some tests \"cd\" around and $(pwd)\nmay not be the same as $TRASH_DIRECTORY.\n-- \nDuy\n"},{"id":"246749","messageId":"xmqqegx95bxc.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":"xmqqvbqm74v7.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-07-25T22:08:31Z","receivedAt":"2014-07-25T22:08:31Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> \"Philip Oakley\" <philipoakley@iee.org> writes:\n>\n>>> which still makes me feel hesitant to promote this\n>>> document without updating its contents, though.\n>>>\n>>\n>> I hadn't viewed it as a 'promotion', rather it was simply ensuring\n>> access to the guide via the help system, instead of leaving it\n>> somewhat hidden.\n>\n> Stale or incorrect pieces of advice that are hidden will not harm\n> (non-)readers.  Making them more available would mean giving them\n> more chances to do harm ;-).\n\nLet's disect it.  I do not have time/concentration to finish all in\none message, so I'll do the first two.\n\n| Everyday Git With 20 Commands Or So\n| ===================================\n| \n| <<Individual Developer (Standalone)>> commands are essential for\n| anybody who makes a commit, even for somebody who works alone.\n| \n| If you work with other people, you will need commands listed in\n| the <<Individual Developer (Participant)>> section as well.\n| \n| People who play the <<Integrator>> role need to learn some more\n| commands in addition to the above.\n| \n| <<Repository Administration>> commands are for system\n| administrators who are responsible for the care and feeding\n| of Git repositories.\n\nLet's assume the categorization above is sensible for now.\n\n| Individual Developer (Standalone)[[Individual Developer (Standalone)]]\n| ----------------------------------------------------------------------\n| \n| A standalone individual developer does not exchange patches with\n| other people, and works alone in a single repository, using the\n| following commands.\n| ...\n\nEverything in the enumeration looks OK except for this one,\n\n|   * linkgit:git-show-branch[1] to see where you are.\n\nwhich is probably no longer the case, for two reasons.  In the\noriginal design of Git UI, you see many things that encourage you to\nview and think about the whole collection of your branches as a whole.\n\"git show-branch\" whose default is to show all of your branches is\njust one of them (other examples include \"git push\" whose default\nused to be \"matching\", expecting that you will work on completing\nall the branches before you push the result out for all of them).\n\nOver time, Git UI mutated into put a lot more focus and stress on\nthe current branch, disregarding what are on the branches you are\nnot corrently on.  \"git log @{u}..\" to see how much more you have\ndone on top of others' work would be more in line with such an\nattitude.\n\nI'd suggest dropping this command from this enumeration.\n\n| Examples\n| ~~~~~~~~\n| \n| Use a tarball as a starting point for a new repository.::\n| ...\n\nPerfectly fine.\n\n| Create a topic branch and develop.::\n| +\n| ------------\n| $ git checkout -b alsa-audio <1>\n| $ edit/compile/test\n| $ git checkout -- curses/ux_audio_oss.c <2>\n| $ git add curses/ux_audio_alsa.c <3>\n| $ edit/compile/test\n| $ git diff HEAD <4>\n| $ git commit -a -s <5>\n\nPerefectly fine up to this point.\n\n| $ edit/compile/test\n| $ git reset --soft HEAD^ <6>\n| $ edit/compile/test\n| $ git diff ORIG_HEAD <7>\n| $ git commit -a -c ORIG_HEAD <8>\n\nThis shows how a typical sequence \"I try to further tweak what I\ncommitted\" looked like.  With the modern Git, you would do\n\n    $ edit/compile/test\n    $ git diff HEAD^ <7>\n    $ git commit -a --amend\n\nwithout the soft reset, which was invented solely because there\nwasn't \"commit --amend\" available.\n\nThe example is perfectly fine after this step, but <6> and <8> need\nto be dropped and others renumbered.\n\n| Individual Developer (Participant)[[Individual Developer (Participant)]]\n| ------------------------------------------------------------------------\n| ...\n|   * linkgit:git-format-patch[1] to prepare e-mail submission, if\n|     you adopt Linux kernel-style public forum workflow.\n\nProbably git-send-email needs to be appended to the end of the\nenumeration.\n\n| Examples\n| ~~~~~~~~\n| \n| Clone the upstream and work on it.  Feed changes to upstream.::\n| +\n| ------------\n| $ git clone git://git.kernel.org/pub/scm/.../torvalds/linux-2.6 my2.6\n| $ cd my2.6\n| $ edit/compile/test; git commit -a -s <1>\n| $ git format-patch origin <2>\n| $ git pull <3>\n| $ git log -p ORIG_HEAD.. arch/i386 include/asm-i386 <4>\n| $ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL <5>\n| $ git reset --hard ORIG_HEAD <6>\n| $ git gc <7>\n| $ git fetch --tags <8>\n| ------------\n| +\n| <1> repeat as needed.\n| <2> extract patches from your branch for e-mail submission.\n| <3> `git pull` fetches from `origin` by default and merges into the\n| current branch.\n| <4> immediately after pulling, look at the changes done upstream\n| since last time we checked, only in the\n| area we are interested in.\n| <5> fetch from a specific branch from a specific repository and merge.\n| <6> revert the pull.\n| <7> garbage collect leftover objects from reverted pull.\n| <8> from time to time, obtain official tags from the `origin`\n| and store them under `.git/refs/tags/`.\n\nThis example works directly on 'master', which is not ideal.  If I\nwere writing this today, I would have made it work on 'mine' branch,\nproduced a patch series out of that branch relative to @{u}, threw\nin 'git send-email' invocation, and had \"git pull\" update the\npristine 'mater' branch after \"git checkout master\".  Merging of\nwork by jgarzik (i.e. not your upstream) would also have gone to its\nown branch, not to 'master'.\n\n| Push into another repository.::\n| +\n| ------------\n| satellite$ git clone mothership:frotz frotz <1>\n| satellite$ cd frotz\n| satellite$ git config --get-regexp '^(remote|branch)\\.' <2>\n| remote.origin.url mothership:frotz\n| remote.origin.fetch refs/heads/*:refs/remotes/origin/*\n| branch.master.remote origin\n| branch.master.merge refs/heads/master\n\nPerfectly fine up to this opint.\n\n| satellite$ git config remote.origin.push \\\n|            master:refs/remotes/satellite/master <3>\n\nSomewhat iffy; \"+refs/heads/*:refs/remotes/satellite/*\" would have\nbeen better.  Need to adjust the explanation below.\n\n| satellite$ edit/compile/test/commit\n| satellite$ git push origin <4>\n\nFine, except that the explanation below needs adjustment.\n\n| <3> arrange `git push` to push local `master` branch to\n| `remotes/satellite/master` branch of the mothership machine.\n| <4> push will stash our work away on `remotes/satellite/master`\n| remote-tracking branch on the mothership machine.  You could use this\n| as a back-up method.\n\nWith wildcarding, we would be backing up all our local branches, not\njust master.\n\n| Branch off of a specific tag.::\n| +\n| ------------\n| $ git checkout -b private2.6.14 v2.6.14 <1>\n| $ edit/compile/test; git commit -a\n| $ git checkout master\n| $ git format-patch -k -m --stdout v2.6.14..private2.6.14 |\n|   git am -3 -k <2>\n| ------------\n| +\n| <1> create a private branch based on a well known (but somewhat behind)\n| tag.\n| <2> forward port all changes in `private2.6.14` branch to `master` branch\n| without a formal \"merging\".\n\nThe last one is fine, but \"cherry-pick v2.6.14..private2.6.14\" would\nbe more common with today's Git.\n"},{"id":"246837","messageId":"A586612AA4994E3F94B96620DB314EF3@PhilipOakley","threadId":"37191","inReplyTo":"xmqqegx95bxc.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2014, #04; Tue, 22)","fromName":"Philip Oakley","fromEmail":"philipoakley@iee.org","sentAt":"2014-07-28T22:12:41Z","receivedAt":"2014-07-28T22:12:41Z","isPatch":false,"sender":{"key":"philipoakley@iee.email","avatar":"https://avatars.githubusercontent.com/u/914343?v=4"},"body":"From: \"Junio C Hamano\" <gitster@pobox.com>\nSent: Friday, July 25, 2014 11:08 PM\n>> * po/everyday-doc (2014-01-27) 1 commit\n>> - Make 'git help everyday' work\n\n> Let's disect it.  I do not have time/concentration to finish all in\n> one message, so I'll do the first two.\n>\n<snip>\n\nThanks for the guidance. I'll work on updating the patch in line with \nyour comments and see how far I get.\n\n--\nPhilip \n"},{"id":"246939","messageId":"53D7F97B.7060607@gmail.com","threadId":"37191","inReplyTo":"CACsJy8DqdTWqVimK0o4rcBXL==iZCsu1OgX2W9ZbgebcSDaKxg@mail.gmail.com","subject":"[RFC/PATCH] Windows tests: let $TRASH_DIRECTORY point to native Windows path","fromName":"Karsten Blees","fromEmail":"karsten.blees@gmail.com","sentAt":"2014-07-29T19:43:55Z","receivedAt":"2014-07-29T19:43:55Z","isPatch":true,"sender":{"key":"karsten.blees@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1111200?v=4"},"body":"MSYS programs typically understand native Windows paths (e.g C:/git), but\nnative Windows programs (including MinGW) don't understand MSYS paths (e.g.\n/c/git).\n\nOn Windows, set TRASH_DIRECTORY to the absolute native path so that it can\nbe used more easily in tests.\n\nMSYS 'tar -f' interprets everything before ':' as hostname, not as drive\nletter. Change respective tests to use stdin / stdout instead of '-f'. Also\nuse $TAR from GIT-BUILD-OPTIONS rather than hardcoded tar.\n\nSigned-off-by: Karsten Blees <blees@dcon.de>\n---\n\nAm 25.07.2014 14:30, schrieb Duy Nguyen:\n> On Wed, Jul 23, 2014 at 9:17 PM, Karsten Blees <karsten.blees@gmail.com> wrote:\n>> With the version in pu, three tests fail. t7001 is fixed with a newer 'cp'.\n>> The other two are unrelated (introduced by nd/multiple-work-trees topic).\n>>\n>> * t1501-worktree: failed 1\n>>   As of 5bbcb072 \"setup.c: support multi-checkout repo setup\"\n>>   Using $TRASH_DIRECTORY doesn't work on Windows.\n>>\n>> * t2026-prune-linked-checkouts: failed 1\n>>   As of 404a45f1 \"prune: strategies for linked checkouts\"\n>>   Dito.\n> \n> I need your help here. Would saving $(pwd) to a variable and using it\n> instead of $TRASH_DIRECTORY work? Some tests \"cd\" around and $(pwd)\n> may not be the same as $TRASH_DIRECTORY.\n> \n\nYes, that would work.\n\n(Actually, you'd only need to change 'echo \"$TRASH_DIR...\"' in two places (both\nbefore cd'ing away). The other instances are parameters to non-msys programs and\nare thus automatically mangled by msys.dll.)\n\nHowever, I wonder why we don't set up TRASH_DIRECTORY to the native Windows path.\nI believe we'd get much fewer 'special' cases that way. Ideally, you shouldn't\nhave to worry about the intricacies of MSYS path mangling when writing tests...\n\n[CCing msysgit for opinions]\n\n\n t/t3513-revert-submodule.sh | 4 ++--\n t/t6041-bisect-submodule.sh | 4 ++--\n t/test-lib.sh               | 1 +\n 3 files changed, 5 insertions(+), 4 deletions(-)\n\ndiff --git a/t/t3513-revert-submodule.sh b/t/t3513-revert-submodule.sh\nindex a1c4e02..4a44dd6 100755\n--- a/t/t3513-revert-submodule.sh\n+++ b/t/t3513-revert-submodule.sh\n@@ -14,11 +14,11 @@ test_description='revert can handle submodules'\n git_revert () {\n \tgit status -su >expect &&\n \tls -1pR * >>expect &&\n-\ttar czf \"$TRASH_DIRECTORY/tmp.tgz\" * &&\n+\t\"$TAR\" cz * >\"$TRASH_DIRECTORY/tmp.tgz\" &&\n \tgit checkout \"$1\" &&\n \tgit revert HEAD &&\n \trm -rf * &&\n-\ttar xzf \"$TRASH_DIRECTORY/tmp.tgz\" &&\n+\t\"$TAR\" xz <\"$TRASH_DIRECTORY/tmp.tgz\" &&\n \tgit status -su >actual &&\n \tls -1pR * >>actual &&\n \ttest_cmp expect actual &&\ndiff --git a/t/t6041-bisect-submodule.sh b/t/t6041-bisect-submodule.sh\nindex c6b7aa6..0de614f 100755\n--- a/t/t6041-bisect-submodule.sh\n+++ b/t/t6041-bisect-submodule.sh\n@@ -8,7 +8,7 @@ test_description='bisect can handle submodules'\n git_bisect () {\n \tgit status -su >expect &&\n \tls -1pR * >>expect &&\n-\ttar czf \"$TRASH_DIRECTORY/tmp.tgz\" * &&\n+\t\"$TAR\" cz * > \"$TRASH_DIRECTORY/tmp.tgz\" &&\n \tGOOD=$(git rev-parse --verify HEAD) &&\n \tgit checkout \"$1\" &&\n \techo \"foo\" >bar &&\n@@ -20,7 +20,7 @@ git_bisect () {\n \tgit bisect start &&\n \tgit bisect good $GOOD &&\n \trm -rf * &&\n-\ttar xzf \"$TRASH_DIRECTORY/tmp.tgz\" &&\n+\t\"$TAR\" xz <\"$TRASH_DIRECTORY/tmp.tgz\" &&\n \tgit status -su >actual &&\n \tls -1pR * >>actual &&\n \ttest_cmp expect actual &&\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 5102340..5f6397b 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -868,6 +868,7 @@ case $(uname -s) in\n \t\tmd5sum \"$@\"\n \t}\n \t# git sees Windows-style pwd\n+\tTRASH_DIRECTORY=$(pwd -W)\n \tpwd () {\n \t\tbuiltin pwd -W\n \t}\n-- \n2.0.2.897.g7f80809.dirty\n\n-- \n-- \n*** Please reply-to-all at all times ***\n*** (do not pretend to know who is subscribed and who is not) ***\n*** Please avoid top-posting. ***\nThe msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.\n\nYou received this message because you are subscribed to the Google\nGroups \"msysGit\" group.\nTo post to this group, send email to msysgit@googlegroups.com\nTo unsubscribe from this group, send email to\nmsysgit+unsubscribe@googlegroups.com\nFor more options, and view previous threads, visit this group at\nhttp://groups.google.com/group/msysgit?hl=en_US?hl=en\n\n--- \nYou received this message because you are subscribed to the Google Groups \"msysGit\" group.\nTo unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.\nFor more options, visit https://groups.google.com/d/optout.\n"},{"id":"246977","messageId":"xmqqvbqezs64.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":"xmqqegx95bxc.fsf@gitster.dls.corp.google.com","subject":"Everyday contents (was Re: What's cooking in git.git (Jul 2014, #04; Tue, 22))","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-07-30T17:13:07Z","receivedAt":"2014-07-30T17:13:07Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Continued: this message only covers the third part (out of the four sections).\n\n| Integrator[[Integrator]]\n| ------------------------\n| \n| A fairly central person acting as the integrator in a group\n| project receives changes made by others, reviews and integrates\n| them and publishes the result for others to use, using these\n| commands in addition to the ones needed by participants.\n\nThis definition of who an \"integrator\" is, and it being a separate\nrole when we discuss various workflows, are still sound, I think.\n\n|   * linkgit:git-pull[1] to merge from your trusted lieutenants.\n\nAmong these enumerated items, we may want to reword this a little\nbit to hint that this section also applies to GitHub pull-request\nworkflow.  However, I am not sure how their \"merge without first\nlocally checking\" action on their website fits in the picture.\n\n| Examples\n| ~~~~~~~~\n| \n| My typical Git day.::\n\nThis probably shouldn't talk about \"My\" in the first place, but in\nany case I work somewhat differently (cf. howto/maintain-git.txt)\nthese days.\n\n| +\n| ------------\n| $ git status <1>\n| $ git show-branch <2>\n\nThis is more like \"git branch --no-merged master\" (and similarly for\n'next' and 'pu'), and is helped by \"Meta/cook -w\" but this document\nis a wrong place to talk about the latter.\n\n| $ mailx <3>\n| & s 2 3 4 5 ./+to-apply\n| & s 7 8 ./+hold-linus\n| & q\n| $ git checkout -b topic/one master\n| $ git am -3 -i -s -u ./+to-apply <4>\n\nNo need to give -u these days.\n\n| $ compile/test\n| $ git checkout -b hold/linus && git am -3 -i -s -u ./+hold-linus <5>\n\nAgain, no \"-u\" necessary.\n\n| $ git checkout topic/one && git rebase master <6>\n| $ git checkout pu && git reset --hard next <7>\n| $ git merge topic/one topic/two && git merge hold/linus <8>\n| $ git checkout maint\n| $ git cherry-pick master~4 <9>\n| $ compile/test\n| $ git tag -s -m \"GIT 0.99.9x\" v0.99.9x <10>\n| $ git fetch ko && git show-branch master maint 'tags/ko-*' <11>\n\nThis step I still use show-branch, but like this:\n\n    for branch in master maint next pu\n    do\n        git show-branch ko/$branch $branch\n    done\n\nand the purpose explained in the footnote is still valid.\n\n| $ git push ko <12>\n| $ git push ko v0.99.9x <13>\n\nI no longer have to do the last step <13>, instead the step <12>\nreads more like\n\n\tgit push --follow-tags ko\n\n| ------------\n| +\n| <1> see what I was in the middle of doing, if any.\n| <2> see what topic branches I have and think about how ready\n| they are.\n\nWith \"show-branch\" replaced with \"branch --no-merged\", the purpose\nof this step is still the same.\n\n| <3> read mails, save ones that are applicable, and save others\n| that are not quite ready.\n| <4> apply them, interactively, with my sign-offs.\n| <5> create topic branch as needed and apply, again with my\n| sign-offs.\n| <6> rebase internal topic branch that has not been merged to the\n| master or exposed as a part of a stable branch.\n| <7> restart `pu` every time from the next.\n| <8> and bundle topic branches still cooking.\n| <9> backport a critical fix.\n| <10> create a signed tag.\n| <11> make sure I did not accidentally rewind master beyond what I\n| already pushed out.  `ko` shorthand points at the repository I have\n| at kernel.org, and looks like this:\n\nNo longer it looks like that ;-)\n\n| +\n| ------------\n| $ cat .git/remotes/ko\n| URL: kernel.org:/pub/scm/git/git.git\n| Pull: master:refs/tags/ko-master\n| Pull: next:refs/tags/ko-next\n| Pull: maint:refs/tags/ko-maint\n| Push: master\n| Push: next\n| Push: +pu\n| Push: maint\n| ------------\n| +\n\n... because we encourage people to use in-config description of\nremotes these days, which should look like this:\n\n\t(in .git/config)\n\t[remote \"ko\"]\n        \turl = kernel.org:/pub/scm/git/git.git\n                fetch = refs/heads/*:refs/remotes/ko/*\n                push = refs/heads/master\n                push = refs/heads/next\n                push = +refs/heads/pu\n                push = refs/heads/maint\n\nAlso tracking is done via refs/remotes/ko/, no longer with tags/.\n\n| In the output from `git show-branch`, `master` should have\n| everything `ko-master` has, and `next` should have\n| everything `ko-next` has.\n\nWith s|ko-master|ko/master| and s|ko-next|ko/next|, the above is\nstill valid.\n\n| <12> push out the bleeding edge.\n\ns/edge./edge, together with new tags that point into my history./\n\n| <13> push the tag out, too.\n\nDrop this.\n"},{"id":"247176","messageId":"35435A61F3C04DC8924B2E2329F9461E@PhilipOakley","threadId":"37191","inReplyTo":"xmqqegx95bxc.fsf@gitster.dls.corp.google.com","subject":"Everday contents (was part of Re: What's cooking in git.git (Jul 2014, #04; Tue, 22))","fromName":"Philip Oakley","fromEmail":"philipoakley@iee.org","sentAt":"2014-08-02T17:28:58Z","receivedAt":"2014-08-02T17:28:58Z","isPatch":false,"sender":{"key":"philipoakley@iee.email","avatar":"https://avatars.githubusercontent.com/u/914343?v=4"},"body":"From: \"Junio C Hamano\" <gitster@pobox.com>\nSent: Friday, July 25, 2014 11:08 PM\n...\n>\n> | Individual Developer (Participant)[[Individual Developer \n> (Participant)]]\n> | ------------------------------------------------------------------------\n\n...\n> | $ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL \n> <5>\n\nWould I be right that \"ALL\" can simply be dropped as something from \n'back then' (13 Dec 2005 v0.99.9-516-g44db136) that I'm ignorant of?\n\n...\n> | <5> fetch from a specific branch from a specific repository and \n> merge.\n> | <6> revert the pull.\n> | <7> garbage collect leftover objects from reverted pull.\n> | <8> from time to time, obtain official tags from the `origin`\n> | and store them under `.git/refs/tags/`.\n>\n> This example works directly on 'master', which is not ideal.  If I\n> were writing this today, I would have made it work on 'mine' branch,\n> produced a patch series out of that branch relative to @{u}, threw\n> in 'git send-email' invocation, and had \"git pull\" update the\n> pristine 'mater' branch after \"git checkout master\".  Merging of\n> work by jgarzik (i.e. not your upstream) would also have gone to its\n> own branch, not to 'master'.\n>\nSlowly working through it ;-)\n\nTa.\n\nPhilip \n"},{"id":"247199","messageId":"xmqqfvhdtrbj.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":"35435A61F3C04DC8924B2E2329F9461E@PhilipOakley","subject":"Re: Everday contents","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-08-03T17:29:20Z","receivedAt":"2014-08-03T17:29:20Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Philip Oakley\" <philipoakley@iee.org> writes:\n\n> From: \"Junio C Hamano\" <gitster@pobox.com>\n> Sent: Friday, July 25, 2014 11:08 PM\n> ...\n>>\n>> | Individual Developer (Participant)[[Individual Developer\n>> (Participant)]]\n>> | ------------------------------------------------------------------------\n>\n> ...\n>> | $ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL\n>> <5>\n>\n> Would I be right that \"ALL\" can simply be dropped as something from\n> back then' (13 Dec 2005 v0.99.9-516-g44db136) that I'm ignorant of?\n\nThe answer depends on the reason why you want to drop it from the\nexample.\n\nThat \"ALL\" is merely a branch name, like \"master\", etc.  I do not\nknow how jgarzik names his published branches these days, but back\nthen ALL there was something that contained all the topics he wanted\nothers to look at.  And the description of <5> explains it to be\nfetching a \"specific branch\", so that needs to be reworded if we are\nto change the example to \"from the default branch of a specific\nrepository\" or something.\n\n> ...\n>> | <5> fetch from a specific branch from a specific repository and\n>> merge.\n\nThanks.\n"},{"id":"247200","messageId":"E675F06626AA430EB89D68FF67734824@PhilipOakley","threadId":"37191","inReplyTo":"xmqqfvhdtrbj.fsf@gitster.dls.corp.google.com","subject":"Re: Everday contents","fromName":"Philip Oakley","fromEmail":"philipoakley@iee.org","sentAt":"2014-08-03T18:41:30Z","receivedAt":"2014-08-03T18:41:30Z","isPatch":false,"sender":{"key":"philipoakley@iee.email","avatar":"https://avatars.githubusercontent.com/u/914343?v=4"},"body":"From: \"Junio C Hamano\" <gitster@pobox.com>\n> \"Philip Oakley\" <philipoakley@iee.org> writes:\n>\n>> From: \"Junio C Hamano\" <gitster@pobox.com>\n>> Sent: Friday, July 25, 2014 11:08 PM\n>> ...\n>>>\n>>> | Individual Developer (Participant)[[Individual Developer\n>>> (Participant)]]\n>>> | ------------------------------------------------------------------------\n>>\n>> ...\n>>> | $ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL\n>>> <5>\n>>\n>> Would I be right that \"ALL\" can simply be dropped as something from\n>> back then' (13 Dec 2005 v0.99.9-516-g44db136) that I'm ignorant of?\n>\n> The answer depends on the reason why you want to drop it from the\n> example.\n>\n> That \"ALL\" is merely a branch name, like \"master\", etc.\n\nThat was the bit I was missing. I had it in my head that it was possibly \nsome historic option as it was in caps.\n\n>  I do not\n> know how jgarzik names his published branches these days, but back\n> then ALL there was something that contained all the topics he wanted\n> others to look at.  And the description of <5> explains it to be\n> fetching a \"specific branch\", so that needs to be reworded if we are\n\nI eventually went with using a lower case 'dev' as a nominal branch \nname, and also named it in the updated <5>. However I hadn't actually \nchecked if the repos is still active.\n\n> to change the example to \"from the default branch of a specific\n> repository\" or something.\n>\n>> ...\n>>> | <5> fetch from a specific branch from a specific repository and\n>>> merge.\n>\n\nThanks.\n\nPhilip \n"},{"id":"247216","messageId":"xmqqy4v4ry00.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":"E675F06626AA430EB89D68FF67734824@PhilipOakley","subject":"Re: Everday contents","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-08-04T17:00:15Z","receivedAt":"2014-08-04T17:00:15Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Philip Oakley\" <philipoakley@iee.org> writes:\n\n> From: \"Junio C Hamano\" <gitster@pobox.com>\n>> \"Philip Oakley\" <philipoakley@iee.org> writes:\n>>\n>>> From: \"Junio C Hamano\" <gitster@pobox.com>\n>>> Sent: Friday, July 25, 2014 11:08 PM\n>>> ...\n>>>>\n>>>> | Individual Developer (Participant)[[Individual Developer\n>>>> (Participant)]]\n>>>> | ------------------------------------------------------------------------\n>>>\n>>> ...\n>>>> | $ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL\n>>>> <5>\n>>>\n>>> Would I be right that \"ALL\" can simply be dropped as something from\n>>> back then' (13 Dec 2005 v0.99.9-516-g44db136) that I'm ignorant of?\n>>\n>> The answer depends on the reason why you want to drop it from the\n>> example.\n>>\n>> That \"ALL\" is merely a branch name, like \"master\", etc.\n>\n> That was the bit I was missing. I had it in my head that it was\n> possibly some historic option as it was in caps.\n\nYeah, I suspected as much ;-)  Thanks for a careful reading.\n"},{"id":"247290","messageId":"xmqqzjfiof72.fsf@gitster.dls.corp.google.com","threadId":"37191","inReplyTo":"xmqqvbqezs64.fsf@gitster.dls.corp.google.com","subject":"Re: Everyday contents (was Re: What's cooking in git.git (Jul 2014, #04; Tue, 22))","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-08-05T20:26:57Z","receivedAt":"2014-08-05T20:26:57Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Continued: this message covers the last part.\n\n| Repository Administration[[Repository Administration]]\n| ------------------------------------------------------\n| \n| A repository administrator uses the following tools to set up\n| and maintain access to the repository by developers.\n| \n|   * linkgit:git-daemon[1] to allow anonymous download from\n|     repository.\n| \n|   * linkgit:git-shell[1] can be used as a 'restricted login shell'\n|     for shared central repository users.\n| \n| link:howto/update-hook-example.html[update hook howto] has a good\n| example of managing a shared central repository.\n\nThis part is fairly stale.  We only talk about allowing anonymous\nfetching via git-daemon and pushing via git-over-ssh.  The readers\nwould want to be aware that they can set up their hosts for fetching\nand pushing via git-over-http aka \"Smart http\", and browsing via\ngitweb.  We should definitely at least mention these, and we may\neven want to describe them at the same level of detail as the\nexisting examples.\n\nI wonder if we also want to mention (but not describe, just make the\nreaders aware of) widely deployed hosting/browsing solutions such as\ngitolite, gerrit code review, and cgit.\n\nDo tasks that are described here have impact on the use of these\nthird-party tools?  For example, I understand gitolite does not\nrequire one UNIX user per biological human user, but the vanilla\npush-over-ssh described in these examples does.  I guess the burden\nof telling the users to \"unlearn everything you read about setting\nup the vanilla git-over-ssh when you use gitolite\" falls on gitolite\ndoc, so in that sense we shouldn't have to worry about doing any of\nthat here.\n\n| Examples\n| ~~~~~~~~\n| We assume the following in /etc/services::\n| +\n| ------------\n| $ grep 9418 /etc/services\n| git\t\t9418/tcp\t\t# Git Version Control System\n| ------------\n\nOK.\n\n| Run git-daemon to serve /pub/scm from inetd.::\n| +\n| ------------\n| $ grep git /etc/inetd.conf\n| git\tstream\ttcp\tnowait\tnobody \\\n|   /usr/bin/git-daemon git-daemon --inetd --export-all /pub/scm\n| ------------\n| +\n| The actual configuration line should be on one line.\n\nOK.\n\n| Run git-daemon to serve /pub/scm from xinetd.::\n| +\n| ------------\n| $ cat /etc/xinetd.d/git-daemon\n| # default: off\n| # description: The Git server offers access to Git repositories\n| service git\n| {\n|         disable = no\n|         type            = UNLISTED\n|         port            = 9418\n|         socket_type     = stream\n|         wait            = no\n|         user            = nobody\n|         server          = /usr/bin/git-daemon\n|         server_args     = --inetd --export-all --base-path=/pub/scm\n|         log_on_failure  += USERID\n| }\n| ------------\n| +\n| Check your xinetd(8) documentation and setup, this is from a Fedora system.\n| Others might be different.\n\nOK, but which vintage of Fedora? ;-)\n\n| Give push/pull only access to developers.::\n\nThis entry may mislead the readers if the \"access\" this section\ntalks about is to the git-daemon we just set up in the above.  We\nshould clarify that this is about git-over-ssh access, i.e. the\nusers will be doing this:\n\n\t$ git push/pull host.xz:/pub/scm/project\n\nor\n\n\t$ git push/pull ssh://host.xz/pub/scm/project\n\nor somesuch.\n\n| +\n| ------------\n| $ grep git /etc/passwd <1>\n| alice:x:1000:1000::/home/alice:/usr/bin/git-shell\n| bob:x:1001:1001::/home/bob:/usr/bin/git-shell\n| cindy:x:1002:1002::/home/cindy:/usr/bin/git-shell\n| david:x:1003:1003::/home/david:/usr/bin/git-shell\n| $ grep git /etc/shells <2>\n| /usr/bin/git-shell\n| ------------\n| +\n| <1> log-in shell is set to /usr/bin/git-shell, which does not\n| allow anything but `git push` and `git pull`.  The users should\n| get an ssh access to the machine.\n| <2> in many distributions /etc/shells needs to list what is used\n| as the login shell.\n\nOne possible mis-interpretation of <1> is \"Thanks to these git-shell\nentries, the users will get `push/pull` accesses to the box; they\nseparately need ssh access to the box (to do something more than\nthat, if desired)\".\n\nIn reality, this configuration _requires_ them to have an ssh access\nto the box and these entries restricts them to only run push/pull\nagainst the host.  We may want to rephrase to clarify.\n\n| CVS-style shared repository.::\n| +\n| ------------\n| $ grep git /etc/group <1>\n| git:x:9418:alice,bob,cindy,david\n| $ cd /home/devo.git\n| $ ls -l <2>\n|   lrwxrwxrwx   1 david git    17 Dec  4 22:40 HEAD -> refs/heads/master\n|   drwxrwsr-x   2 david git  4096 Dec  4 22:40 branches\n|   -rw-rw-r--   1 david git    84 Dec  4 22:40 config\n|   -rw-rw-r--   1 david git    58 Dec  4 22:40 description\n|   drwxrwsr-x   2 david git  4096 Dec  4 22:40 hooks\n|   -rw-rw-r--   1 david git 37504 Dec  4 22:40 index\n|   drwxrwsr-x   2 david git  4096 Dec  4 22:40 info\n|   drwxrwsr-x   4 david git  4096 Dec  4 22:40 objects\n|   drwxrwsr-x   4 david git  4096 Nov  7 14:58 refs\n|   drwxrwsr-x   2 david git  4096 Dec  4 22:40 remotes\n| $ ls -l hooks/update <3>\n|   -r-xr-xr-x   1 david git  3536 Dec  4 22:40 update\n| $ cat info/allowed-users <4>\n| refs/heads/master\talice\\|cindy\n| refs/heads/doc-update\tbob\n| refs/tags/v[0-9]*\tdavid\n| ------------\n| +\n| <1> place the developers into the same git group.\n| <2> and make the shared repository writable by the group.\n| <3> use update-hook example by Carl from Documentation/howto/\n| for branch policy control.\n| <4> alice and cindy can push into master, only bob can push into doc-update.\n| david is the release manager and is the only person who can\n| create and push version tags.\n\nOK.\n\n| HTTP server to support dumb protocol transfer.::\n| +\n| ------------\n| dev$ git update-server-info <1>\n| dev$ ftp user@isp.example.com <2>\n| ftp> cp -r .git /home/user/myproject.git\n| ------------\n| +\n| <1> make sure your info/refs and objects/info/packs are up-to-date\n| <2> upload to public HTTP server hosted by your ISP.\n\nThis may want to be removed, for two reasons.  Nobody should be\nusing dumb HTTP anymore, and the \"cp\" implies that the repository is\nnot maintained at the isp.example.com site but is synchronized\nmanually from some other location with _only_ ftp access into it,\nwhich is not a typical way to run your project (I admit I did this\nmyself in very early days of Git when Linus was still running the\nproject).\n\nThanks.\n"},{"id":"247293","messageId":"FB81543A687C4375BF4E3005464EE38A@PhilipOakley","threadId":"37191","inReplyTo":"xmqqzjfiof72.fsf@gitster.dls.corp.google.com","subject":"Re: Everyday contents (was Re: What's cooking in git.git (Jul 2014, #04; Tue, 22))","fromName":"Philip Oakley","fromEmail":"philipoakley@iee.org","sentAt":"2014-08-05T21:00:17Z","receivedAt":"2014-08-05T21:00:17Z","isPatch":false,"sender":{"key":"philipoakley@iee.email","avatar":"https://avatars.githubusercontent.com/u/914343?v=4"},"body":"From: \"Junio C Hamano\" <gitster@pobox.com>\n> Continued: this message covers the last part.\n> \n> | Repository Administration[[Repository Administration]]\n> | ------------------------------------------------------\n> | \n> | A repository administrator uses the following tools to set up\n> | and maintain access to the repository by developers.\n...\n\nThanks for this final part. \n\nI'd just updated the original patch and split it into three steps:\n1. update the everday text in it's current place,\n2. tweak the Makefile for the Obsolete_Html list ready for next patch\n3. swap over to the giteveryday file nameing and fix the linked docs.\n\nI'll add in your guidance on the last part to my patch 1.\n\nMany thanks.\n--\nPhilip\n"},{"id":"248394","messageId":"CACsJy8CDZCkQNSfu7HMvfv6++fjr9V6KvhFmgqBQMyd4qnqMtg@mail.gmail.com","threadId":"37191","inReplyTo":"53D7F97B.7060607@gmail.com","subject":"Re: [RFC/PATCH] Windows tests: let $TRASH_DIRECTORY point to native Windows path","fromName":"Duy Nguyen","fromEmail":"pclouds@gmail.com","sentAt":"2014-08-27T13:08:23Z","receivedAt":"2014-08-27T13:08:23Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Ping...\n\nOn Wed, Jul 30, 2014 at 2:43 AM, Karsten Blees <karsten.blees@gmail.com> wrote:\n> MSYS programs typically understand native Windows paths (e.g C:/git), but\n> native Windows programs (including MinGW) don't understand MSYS paths (e.g.\n> /c/git).\n>\n> On Windows, set TRASH_DIRECTORY to the absolute native path so that it can\n> be used more easily in tests.\n>\n> MSYS 'tar -f' interprets everything before ':' as hostname, not as drive\n> letter. Change respective tests to use stdin / stdout instead of '-f'. Also\n> use $TAR from GIT-BUILD-OPTIONS rather than hardcoded tar.\n>\n> Signed-off-by: Karsten Blees <blees@dcon.de>\n> ---\n>\n> Am 25.07.2014 14:30, schrieb Duy Nguyen:\n>> On Wed, Jul 23, 2014 at 9:17 PM, Karsten Blees <karsten.blees@gmail.com> wrote:\n>>> With the version in pu, three tests fail. t7001 is fixed with a newer 'cp'.\n>>> The other two are unrelated (introduced by nd/multiple-work-trees topic).\n>>>\n>>> * t1501-worktree: failed 1\n>>>   As of 5bbcb072 \"setup.c: support multi-checkout repo setup\"\n>>>   Using $TRASH_DIRECTORY doesn't work on Windows.\n>>>\n>>> * t2026-prune-linked-checkouts: failed 1\n>>>   As of 404a45f1 \"prune: strategies for linked checkouts\"\n>>>   Dito.\n>>\n>> I need your help here. Would saving $(pwd) to a variable and using it\n>> instead of $TRASH_DIRECTORY work? Some tests \"cd\" around and $(pwd)\n>> may not be the same as $TRASH_DIRECTORY.\n>>\n>\n> Yes, that would work.\n>\n> (Actually, you'd only need to change 'echo \"$TRASH_DIR...\"' in two places (both\n> before cd'ing away). The other instances are parameters to non-msys programs and\n> are thus automatically mangled by msys.dll.)\n>\n> However, I wonder why we don't set up TRASH_DIRECTORY to the native Windows path.\n> I believe we'd get much fewer 'special' cases that way. Ideally, you shouldn't\n> have to worry about the intricacies of MSYS path mangling when writing tests...\n>\n> [CCing msysgit for opinions]\n>\n>\n>  t/t3513-revert-submodule.sh | 4 ++--\n>  t/t6041-bisect-submodule.sh | 4 ++--\n>  t/test-lib.sh               | 1 +\n>  3 files changed, 5 insertions(+), 4 deletions(-)\n>\n> diff --git a/t/t3513-revert-submodule.sh b/t/t3513-revert-submodule.sh\n> index a1c4e02..4a44dd6 100755\n> --- a/t/t3513-revert-submodule.sh\n> +++ b/t/t3513-revert-submodule.sh\n> @@ -14,11 +14,11 @@ test_description='revert can handle submodules'\n>  git_revert () {\n>         git status -su >expect &&\n>         ls -1pR * >>expect &&\n> -       tar czf \"$TRASH_DIRECTORY/tmp.tgz\" * &&\n> +       \"$TAR\" cz * >\"$TRASH_DIRECTORY/tmp.tgz\" &&\n>         git checkout \"$1\" &&\n>         git revert HEAD &&\n>         rm -rf * &&\n> -       tar xzf \"$TRASH_DIRECTORY/tmp.tgz\" &&\n> +       \"$TAR\" xz <\"$TRASH_DIRECTORY/tmp.tgz\" &&\n>         git status -su >actual &&\n>         ls -1pR * >>actual &&\n>         test_cmp expect actual &&\n> diff --git a/t/t6041-bisect-submodule.sh b/t/t6041-bisect-submodule.sh\n> index c6b7aa6..0de614f 100755\n> --- a/t/t6041-bisect-submodule.sh\n> +++ b/t/t6041-bisect-submodule.sh\n> @@ -8,7 +8,7 @@ test_description='bisect can handle submodules'\n>  git_bisect () {\n>         git status -su >expect &&\n>         ls -1pR * >>expect &&\n> -       tar czf \"$TRASH_DIRECTORY/tmp.tgz\" * &&\n> +       \"$TAR\" cz * > \"$TRASH_DIRECTORY/tmp.tgz\" &&\n>         GOOD=$(git rev-parse --verify HEAD) &&\n>         git checkout \"$1\" &&\n>         echo \"foo\" >bar &&\n> @@ -20,7 +20,7 @@ git_bisect () {\n>         git bisect start &&\n>         git bisect good $GOOD &&\n>         rm -rf * &&\n> -       tar xzf \"$TRASH_DIRECTORY/tmp.tgz\" &&\n> +       \"$TAR\" xz <\"$TRASH_DIRECTORY/tmp.tgz\" &&\n>         git status -su >actual &&\n>         ls -1pR * >>actual &&\n>         test_cmp expect actual &&\n> diff --git a/t/test-lib.sh b/t/test-lib.sh\n> index 5102340..5f6397b 100644\n> --- a/t/test-lib.sh\n> +++ b/t/test-lib.sh\n> @@ -868,6 +868,7 @@ case $(uname -s) in\n>                 md5sum \"$@\"\n>         }\n>         # git sees Windows-style pwd\n> +       TRASH_DIRECTORY=$(pwd -W)\n>         pwd () {\n>                 builtin pwd -W\n>         }\n> --\n> 2.0.2.897.g7f80809.dirty\n>\n\n\n\n-- \nDuy\n"}]}