{"thread":{"id":"37474","subject":"What's cooking in git.git (Sep 2014, #01; Tue, 2)","startedAt":"2014-09-02T22:06:58Z","lastAt":"2015-03-26T13:46:55Z","messageCount":12,"participants":["Junio C Hamano","Johannes Sixt","Torsten Bögershausen","Keller, Jacob E","Duy Nguyen","Tommy38"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"248763","messageId":"xmqqzjehy8vx.fsf@gitster.dls.corp.google.com","threadId":"37474","inReplyTo":null,"subject":"What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-09-02T22:06:58Z","receivedAt":"2014-09-02T22:06:58Z","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\nThe first batch of topics have graduated to 'master'.\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* bc/archive-pax-header-mode (2014-08-04) 1 commit\n  (merged to 'next' on 2014-08-26 at 51fca1a)\n + archive: honor tar.umask even for pax headers\n\n Originally merged to 'next' on 2014-08-13\n\n Implementations of \"tar\" that do not understand an extended pax\n header would extract the contents of it in a regular file; make\n sure the permission bits of this file follows the same tar.umask\n configuration setting.\n\n\n* jc/reopen-lock-file (2014-07-14) 1 commit\n  (merged to 'next' on 2014-08-26 at c5a5a12)\n + lockfile: allow reopening a closed but still locked file\n\n Originally merged to 'next' on 2014-07-21\n\n Needed in the \"commit -p\" code path to update the cache tree in the\n index (e.g. for dt/cache-tree-repair topic).\n\n\n* jk/pretty-empty-format (2014-07-30) 3 commits\n  (merged to 'next' on 2014-08-26 at 1eb7cc3)\n + pretty: make empty userformats truly empty\n + pretty: treat \"--format=\" as an empty userformat\n + revision: drop useless string offset when parsing \"--pretty\"\n\n Originally merged to 'next' on 2014-08-13\n\n \"git log --pretty/format=\" with an empty format string did not mean\n the more obvious \"No output whatsoever\" but \"Use default format\",\n which was counterintuitive.\n\n\n* mm/config-edit-global (2014-07-25) 3 commits\n  (merged to 'next' on 2014-08-26 at 3a47fc5)\n + commit: advertise config --global --edit on guessed identity\n + home_config_paths(): let the caller ignore xdg path\n + config --global --edit: create a template file if needed\n\n Originally merged to 'next' on 2014-07-31\n\n Start \"git config --edit --global\" from a skeletal per-user\n configuration file contents, instead of a total blank, when the\n user does not already have any.  This immediately reduces the need\n for a later \"Have you forgotten setting core.user?\" and we can add\n more to the template as we gain more experience.\n\n\n* pr/remotes-in-hashmap (2014-07-30) 1 commit\n  (merged to 'next' on 2014-08-26 at 2052a31)\n + use a hashmap to make remotes faster\n\n Originally merged to 'next' on 2014-08-13\n\n Optimize remotes configuration look-up in a repository with very\n many remotes defined.\n\n\n* rs/init-no-duplicate-real-path (2014-07-28) 1 commit\n  (merged to 'next' on 2014-08-26 at c66e1c4)\n + init: avoid superfluous real_path() calls\n\n Originally merged to 'next' on 2014-07-31\n\n\n* rs/strbuf-getcwd (2014-08-26) 10 commits\n  (merged to 'next' on 2014-08-26 at 11be0d6)\n + use strbuf_add_absolute_path() to add absolute paths\n + abspath: convert absolute_path() to strbuf\n + use xgetcwd() to set $GIT_DIR\n + use xgetcwd() to get the current directory or die\n + wrapper: add xgetcwd()\n + abspath: convert real_path_internal() to strbuf\n + abspath: use strbuf_getcwd() to remember original working directory\n + setup: convert setup_git_directory_gently_1 et al. to strbuf\n + unix-sockets: use strbuf_getcwd()\n + strbuf: add strbuf_getcwd()\n (this branch is tangled with nd/lock-paths-absolute.)\n\n Originally merged to 'next' on 2014-08-18\n\n Reduce the use of fixed sized buffer passed to getcwd() calls\n by introducing xgetcwd() helper.\n\n\n* ta/config-set (2014-07-29) 2 commits\n  (merged to 'next' on 2014-08-26 at 81395f9)\n + test-config: add tests for the config_set API\n + add `config_set` API for caching config-like files\n (this branch is used by ta/config-set-1 and ta/config-set-2.)\n\n Originally merged to 'next' on 2014-08-13\n\n Add in-core caching layer to let us avoid reading the same\n configuration files number of times.\n\n\n* ta/pretty-parse-config (2014-08-04) 1 commit\n  (merged to 'next' on 2014-08-26 at 901e8c2)\n + pretty.c: make git_pretty_formats_config return -1 on git_config_string failure\n\n Originally merged to 'next' on 2014-08-13\n\n--------------------------------------------------\n[New Topics]\n\n* bb/date-iso-strict (2014-08-29) 1 commit\n - pretty: provide a strict ISO 8601 date format\n\n\n* jk/commit-author-parsing (2014-08-29) 6 commits\n - determine_author_info(): copy getenv output\n - determine_author_info(): reuse parsing functions\n - date: use strbufs in date-formatting functions\n - record_author_date(): use find_commit_header()\n - record_author_date(): fix memory leak on malformed commit\n - commit: provide a function to find a header in a buffer\n\n\n* jk/contrib-subtree-make-all (2014-08-18) 1 commit\n - subtree: make \"all\" default target of Makefile\n\n\n* jk/fast-export-anonymize (2014-08-28) 2 commits\n - docs/fast-export: explain --anonymize more completely\n - teach fast-export an --anonymize option\n\n\n* jk/index-pack-threading-races (2014-08-29) 1 commit\n - index-pack: fix race condition with duplicate bases\n\n\n* jk/send-pack-many-refspecs (2014-08-26) 1 commit\n - send-pack: take refspecs over stdin\n\n\n* jp/index-with-corrupt-stages (2014-08-29) 2 commits\n - read_index_unmerged(): remove unnecessary loop index adjustment\n - read_index_from(): catch out of order entries when reading an index file\n\n\n* jt/timer-settime (2014-08-29) 9 commits\n - use timer_settime() for new platforms\n - autoconf: check for timer_settime()\n - autoconf: check for struct itimerspec\n - autoconf: check for struct sigevent\n - autoconf: check for struct timespec\n - autoconf: check for timer_t\n - autoconf: check for setitimer()\n - autoconf: check for struct itimerval\n - git-compat-util.h: add missing semicolon after struct itimerval\n\n Need a rerolled one.\n\n\n* mb/build-contrib-svn-fe (2014-08-28) 1 commit\n - contrib/svn-fe: fix Makefile\n\n\n* mb/fast-import-delete-root (2014-08-29) 2 commits\n - fast-import: fix segfault in store_tree()\n - t9300: test filedelete command\n\n\n* mm/discourage-commit-a-to-finish-conflict-resolution (2014-08-28) 1 commit\n - merge, pull: stop advising 'commit -a' in case of conflict\n\n\n* sp/pack-protocol-doc-on-shallow (2014-08-28) 1 commit\n  (merged to 'next' on 2014-08-29 at b1ae451)\n + Document LF appearing in shallow command during send-pack/receive-pack\n\n Will merge to 'master'.\n\n\n* ah/grammofix (2014-09-02) 1 commit\n - grammofix in user-facing messages\n\n\n* da/styles (2014-09-02) 1 commit\n - stylefix: asterisks stick to the variable, not the type\n\n\n* da/use-rev-parse-verify-quiet-in-stash (2014-09-02) 1 commit\n - stash: prefer --quiet over shell redirection\n\n\n* mk/reachable-protect-detached-head (2014-09-02) 2 commits\n - SQUASH???\n - reachable.c: add HEAD to reachability starting commits\n\n\n* rs/furhter-uses-of-skip-prefix (2014-09-02) 2 commits\n - pack-write: simplify index_pack_lockfile using skip_prefix() and xstrfmt()\n - connect: simplify check_ref() using skip_prefix() and starts_with()\n\n\n* rs/merge-tree-simplify (2014-09-02) 1 commit\n - merge-tree: remove unused df_conflict arguments\n\n\n* rs/simplify-config-include (2014-09-02) 1 commit\n - config: simplify git_config_include()\n\n\n* rs/simplify-http-walker (2014-09-02) 1 commit\n - http-walker: simplify process_alternates_response() using strbuf\n\n\n* tb/crlf-tests (2014-09-02) 3 commits\n - MinGW: update tests to handle a native eol of crlf\n - Makefile: propagate NATIVE_CRLF to C\n - t0027: Tests for core.eol=native, eol=lf, eol=crlf\n\n--------------------------------------------------\n[Stalled]\n\n* jk/pack-bitmap (2014-08-04) 1 commit\n - pack-bitmap: do not use gcc packed attribute\n\n Hold, waiting for Karsten's replacement.\n\n\n* nd/multiple-work-trees (2014-07-29) 39 commits\n . checkout --to: do not touch existing target directory\n . checkout: prefix --to argument properly when cwd is moved\n . environment.c: fix incorrect git_graft_file initialization\n . checkout --to: fix dangling pointers in remove_junk()\n . checkout: no auto-detach if the ref is already checked out\n . prune --repos: fix uninitialized access\n . checkout: no need to call check_linked_checkouts if head_ref is NULL\n . gitrepository-layout.txt: s/ignored/ignored if/\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 Reroll posted, but haven't picked up yet.  How would this interact\n with rr/transaction series which is pretty much all about the refs?\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 Update the way the \"difftool --help\" shows the help message that is\n shared with the \"mergetool\" to reduce one shell dependency.\n\n Will be rerolled.\n\n\n* rr/mergetool-temporary-filename-tweak (2014-08-21) 1 commit\n - Allow the user to change the temporary file name for mergetool\n\n Needs rerolling (new paragraph in doc seems to be in a wrong place)\n\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 Reroll exists, but haven't had time to pick it up yet.\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 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[Cooking]\n\n* ta/config-add-to-empty-or-true-fix (2014-08-18) 1 commit\n  (merged to 'next' on 2014-08-29 at d219212)\n + make config --add behave correctly for empty and NULL values\n\n We may want to undo the \"a^\" bit along the lines of $gmane/255445\n\n\n* et/spell-poll-infinite-with-minus-one-only (2014-08-22) 1 commit\n - upload-pack: keep poll(2)'s timeout to -1\n\n We used to pass -1000 to poll(2), expecting it to also mean \"no\n timeout\", which should be spelled as -1.\n\n Will merge to 'next'.\n\n\n* jk/make-simplify-dependencies (2014-08-26) 3 commits\n - Makefile: drop CHECK_HEADER_DEPENDENCIES code\n - Makefile: use `find` to determine static header dependencies\n - i18n: treat \"make pot\" as an explicitly-invoked target\n\n Admit that keeping LIB_H up-to-date, only for those that do not use\n the automatically generated dependencies, is a losing battle, and\n make it conservative by making everything depend on anything.\n\n Will merge to 'next'.\n\n\n* jk/prompt-stash-could-be-packed (2014-08-25) 1 commit\n  (merged to 'next' on 2014-08-29 at 526e3bd)\n + git-prompt: do not look for refs/stash in $GIT_DIR\n\n The prompt script checked $GIT_DIR/ref/stash file to see if there\n is a stash, which was a no-no.\n\n Will merge to 'master'.\n\n\n* jk/prune-top-level-refs-after-packing (2014-08-25) 1 commit\n - pack-refs: prune top-level refs like \"refs/foo\"\n\n After \"pack-refs --prune\" packed refs at the top-level, it failed\n to prune them.\n\n Will merge to 'next'.\n\n\n* jk/fast-import-fixes (2014-08-25) 2 commits\n - fast-import: fix buffer overflow in dump_tags\n - fast-import: clean up pack_data pointer in end_packfile\n\n With sufficiently long refnames, fast-import could have overflown\n an on-stack buffer.\n\n Will merge to 'next'.\n\n\n* nd/fetch-pass-quiet-to-gc-child-process (2014-08-18) 2 commits\n - fetch: silence git-gc if --quiet is given\n - fetch: convert argv_gc_auto to struct argv_array\n\n Progress output from \"git gc --auto\" was visible in \"git fetch -q\".\n\n Will merge to 'next'.\n\n\n* rs/list-optim (2014-08-25) 2 commits\n - walker: avoid quadratic list insertion in mark_complete\n - sha1_name: avoid quadratic list insertion in handle_one_ref\n\n Fix a couple of \"accumulate into a sorted list\" to \"accumulate and\n then sort the list\".\n\n Will merge to 'next'.\n\n\n* sb/mailsplit-dead-code-removal (2014-08-13) 1 commit\n  (merged to 'next' on 2014-08-29 at 4f9ca4f)\n + mailsplit.c: remove dead code\n\n Will merge to 'master'.\n\n\n* tb/pretty-format-cd-date-format (2014-08-21) 1 commit\n  (merged to 'next' on 2014-08-29 at ab8ccd4)\n + pretty: note that %cd respects the --date= option\n\n Documentation update.\n\n Will merge to 'master'.\n\n\n* jk/name-decoration-alloc (2014-08-27) 3 commits\n - log-tree: use FLEX_ARRAY in name_decoration\n - log-tree: make name_decoration hash static\n - log-tree: make add_name_decoration a public function\n\n The API to allocate the structure to keep track of commit\n decoration was cumbersome to use, inviting lazy code to\n overallocate memory.\n\n Will merge to 'next'.\n\n\n* br/http-init-fix (2014-08-21) 2 commits\n - http: style fixes for curl_multi_init error check\n - http.c: die if curl_*_init fails\n\n Will merge to 'next'.\n\n\n* br/imap-send-simplify-tunnel-child-process (2014-09-02) 3 commits\n - imap-send: simplify v_issue_imap_cmd() and get_cmd_result() using starts_with()\n - imap-send.c: imap_folder -> imap_server_conf.folder\n - git-imap-send: simplify tunnel construction\n\n Will merge to 'next'.\n\n\n* jc/config-mak-document-darwin-vs-macosx (2014-08-15) 1 commit\n  (merged to 'next' on 2014-08-29 at 55e28af)\n + config.mak.uname: add hint on uname_R for MacOS X\n (this branch uses km/no-apple-common-crypto-on-darwin-8-and-below.)\n\n Will merge to 'master'.\n\n\n* jn/unpack-trees-checkout-m-carry-deletion (2014-08-25) 3 commits\n - checkout -m: attempt merge when deletion of path was staged\n - unpack-trees: use 'cuddled' style for if-else cascade\n - unpack-trees: simplify 'all other failures' case\n\n Will merge to 'next'.\n\n\n* km/no-apple-common-crypto-on-darwin-8-and-below (2014-08-15) 1 commit\n  (merged to 'next' on 2014-08-29 at 8abb416)\n + config.mak.uname: set NO_APPLE_COMMON_CRYPTO on older systems\n (this branch is used by jc/config-mak-document-darwin-vs-macosx.)\n\n Build automation for older versions of MacOS X.\n\n Will merge to 'master'.\n\n\n* nd/large-blobs (2014-08-18) 5 commits\n - diff: shortcut for diff'ing two binary SHA-1 objects\n - diff --stat: mark any file larger than core.bigfilethreshold binary\n - diff.c: allow to pass more flags to diff_populate_filespec\n - sha1_file.c: do not die failing to malloc in unpack_compressed_entry\n - wrapper.c: introduce gentle xmallocz that does not die()\n\n Will merge to 'next'.\n\n\n* nd/mv-code-cleaning (2014-08-11) 9 commits\n - SQUASH???\n - mv: no SP between function name and the first opening parenthese\n - mv: combine two if(s)\n - mv: unindent one level for directory move code\n - mv: move index search code out\n - mv: remove an \"if\" that's always true\n - mv: split submodule move preparation code out\n - mv: flatten error handling code block\n - mv: mark strings for translations\n\n SQUASH!!! Will merge to 'next'.\n\n\n* nd/strbuf-utf8-replace (2014-08-11) 1 commit\n  (merged to 'next' on 2014-08-29 at 5d1ddf4)\n + utf8.c: fix strbuf_utf8_replace() consuming data beyond input string\n\n Will merge to 'master'.\n\n\n* rs/clean-menu-item-defn (2014-08-18) 1 commit\n  (merged to 'next' on 2014-08-29 at 88c1a9d)\n + clean: use f(void) instead of f() to declare a pointer to a function without arguments\n\n Will merge to 'master'.\n\n\n* rs/inline-compat-path-macros (2014-08-18) 1 commit\n  (merged to 'next' on 2014-08-29 at 5705ad5)\n + turn path macros into inline function\n\n Will merge to 'master'.\n\n\n* rs/refresh-beyond-symlink (2014-08-10) 1 commit\n  (merged to 'next' on 2014-08-29 at 90a4a8b)\n + read-cache: check for leading symlinks when refreshing index\n\n \"git add x\" where x that used to be a directory has become a\n symbolic link to a directory misbehaved.\n\n Will merge to 'master'.\n\n\n* sb/blame-msg-i18n (2014-08-12) 1 commit\n  (merged to 'next' on 2014-08-29 at 5b33466)\n + builtin/blame.c: add translation to warning about failed revision walk\n\n Will merge to 'master'.\n\n\n* sb/plug-leaks (2014-08-10) 2 commits\n  (merged to 'next' on 2014-08-29 at e42f0b8)\n + clone.c: don't leak memory in cmd_clone\n + remote.c: don't leak the base branch name in format_tracking_info\n\n Will merge to 'master'.\n\n\n* sb/prepare-revision-walk-error-check (2014-08-12) 1 commit\n  (merged to 'next' on 2014-08-29 at fb82508)\n + prepare_revision_walk(): check for return value in all places\n\n Will merge to 'master'.\n\n\n* so/rebase-doc (2014-08-12) 1 commit\n  (merged to 'next' on 2014-08-29 at 77cfce1)\n + Documentation/git-rebase.txt: -f forces a rebase that would otherwise be a no-op\n\n May need description on what makes various modes of operation to\n decide that the request can become a \"no-op\".\n\n Will merge to 'master'.\n\n\n* sp/stream-clean-filter (2014-08-28) 6 commits\n - convert: stream from fd to required clean filter to reduce used address space\n - copy_fd(): do not close the input file descriptor\n - mmap_limit: introduce GIT_MMAP_LIMIT to allow testing expected mmap size\n - memory_limit: use git_env_ulong() to parse GIT_ALLOC_LIMIT\n - config.c: add git_env_ulong() to parse environment variable\n - convert: drop arguments other than 'path' from would_convert_to_git()\n\n Rerolled.\n\n\n* jc/push-cert (2014-08-25) 20 commits\n - signed push: fortify against replay attacks\n - signed-push: add \"pushee\" header to push certificate\n - signed push: remove duplicated protocol info\n - send-pack: send feature request on push-cert packet\n - receive-pack: GPG-validate push certificates\n - the beginning of the signed push\n - pack-protocol doc: typofix for PKT-LINE\n - gpg-interface: move parse_signature() to where it should be\n - gpg-interface: move parse_gpg_output() to where it should be\n - send-pack: clarify that cmds_sent is a boolean\n - send-pack: refactor inspecting and resetting status and sending commands\n - send-pack: rename \"new_refs\" to \"need_pack_data\"\n - send-pack: factor out capability string generation\n - send-pack: always send capabilities\n - send-pack: refactor decision to send update per ref\n - send-pack: move REF_STATUS_REJECT_NODELETE logic a bit higher\n - receive-pack: factor out queueing of command\n - receive-pack: do not reuse old_sha1[] for other things\n - receive-pack: parse feature request a bit earlier\n - receive-pack: do not overallocate command structure\n\n Allow \"git push\" request to be signed, so that it can be verified\n audited, using the GPG signature of the person who pushed, that the\n tips of branches at a public repository really point the commits\n the pusher wanted to, without having to \"trust\" the server.\n\n The tip two feels still a bit slushy, but otherwise should be\n reasonably solid to build upon.\n\n\n* rs/child-process-init (2014-08-20) 4 commits\n - run-command: inline prepare_run_command_v_opt()\n - run-command: call run_command_v_opt_cd_env() instead of duplicating it\n - run-command: introduce child_process_init()\n - run-command: introduce CHILD_PROCESS_INIT\n\n Will merge to 'next'.\n\n\n* tf/imap-send-create (2014-08-25) 2 commits\n  (merged to 'next' on 2014-08-29 at 8390945)\n + imap-send: create target mailbox if it is missing\n + imap-send: clarify CRAM-MD5 vs LOGIN documentation\n\n Will merge to 'master'.\n\n\n* bc/imap-send-doc (2014-08-05) 1 commit\n  (merged to 'next' on 2014-08-29 at 2ea514b)\n + imap-send doc: omit confusing \"to use imap-send\" modifier\n\n Will merge to 'master'.\n\n\n* jc/apply-ws-prefix (2014-08-07) 3 commits\n  (merged to 'next' on 2014-08-29 at 67967d3)\n + apply: omit ws check for excluded paths\n + apply: hoist use_patch() helper for path exclusion up\n + apply: use the right attribute for paths in non-Git patches\n\n Applying a patch not generated by Git in a subdirectory used to\n check the whitespace breakage using the attributes for incorrect\n paths. Also whitespace checks were performed even for paths\n excluded via \"git apply --exclude=<path>\" mechanism.\n\n Will merge to 'master'.\n\n\n* jk/command-line-config-empty-string (2014-08-05) 1 commit\n  (merged to 'next' on 2014-08-29 at 74f04af)\n + config: teach \"git -c\" to recognize an empty string\n\n \"git -c section.var command\" and \"git -c section.var= command\"\n should pass the configuration differently (the former should be\n a boolean true, the latter should be an empty string).\n\n Will merge to 'master'.\n\n\n* la/init-doc (2014-08-08) 7 commits\n  (merged to 'next' on 2014-08-29 at 2cf846b)\n + Documentation: git-init: flesh out example\n + Documentation: git-init: template directory: reword and cross-reference\n + Documentation: git-init: reword parenthetical statements\n + Documentation: git-init: --separate-git-dir: clarify\n + Documentation: git-init: template directory: reword\n + Documentation: git-init: list items facelift\n + Documentation: git-init: typographical fixes\n\n Will merge to 'master'.\n\n\n* lf/bundle-exclusion (2014-08-07) 1 commit\n  (merged to 'next' on 2014-08-29 at d84b102)\n + bundle: fix exclusion of annotated tags\n\n Will merge to 'master'.\n\n\n* mm/log-branch-desc-plug-leak (2014-08-07) 1 commit\n  (merged to 'next' on 2014-08-29 at 3580add)\n + builtin/log.c: fix minor memory leak\n\n Will merge to 'master'.\n\n\n* ta/config-set-1 (2014-08-07) 8 commits\n - add tests for `git_config_get_string_const()`\n - add a test for semantic errors in config files\n - rewrite git_config() to use the config-set API\n - config: add `git_die_config()` to the config-set API\n - change `git_config()` return value to void\n - add line number and file name info to `config_set`\n - config.c: fix accuracy of line number in errors\n - config.c: mark error and warnings strings for translation\n (this branch is used by ta/config-set-2.)\n\n Will merge to 'next'.\n\n\n* ta/config-set-2 (2014-08-13) 15 commits\n - builtin/apply.c: replace `git_config()` with `git_config_get_string_const()`\n - merge-recursive.c: replace `git_config()` with `git_config_get_int()`\n - ll-merge.c: refactor `read_merge_config()` to use `git_config_string()`\n - fast-import.c: replace `git_config()` with `git_config_get_*()` family\n - branch.c: replace `git_config()` with `git_config_get_string()\n - alias.c: replace `git_config()` with `git_config_get_string()`\n - imap-send.c: replace `git_config()` with `git_config_get_*()` family\n - pager.c: replace `git_config()` with `git_config_get_value()`\n - builtin/gc.c: replace `git_config()` with `git_config_get_*()` family\n - rerere.c: replace `git_config()` with `git_config_get_*()` family\n - fetchpack.c: replace `git_config()` with `git_config_get_*()` family\n - archive.c: replace `git_config()` with `git_config_get_bool()` family\n - read-cache.c: replace `git_config()` with `git_config_get_*()` family\n - http-backend.c: replace `git_config()` with `git_config_get_bool()` family\n - daemon.c: replace `git_config()` with `git_config_get_bool()` family\n (this branch uses ta/config-set-1.)\n\n Will merge to 'next'.\n\n\n* jk/stash-list-p (2014-08-07) 1 commit\n  (merged to 'next' on 2014-08-29 at db94527)\n + stash: default listing to working-tree diff\n\n Teach \"git stash list -p\" to show the difference between the base\n commit version and the working tree version, which is in line with\n what \"git show\" gives.\n\n Will merge to 'master'.\n\n\n* rs/ref-transaction-multi (2014-08-27) 6 commits\n - ### rs/ref-transaction-multi\n - refs.c: make the *_packed_refs functions static\n - refs.c: make repack_without_refs static\n - remote.c: use a transaction for deleting refs\n - refs.c: write updates to packed refs when a transaction has more than one ref\n - refs.c: move reflog updates into its own function\n (this branch uses rs/ref-transaction, rs/ref-transaction-1, rs/ref-transaction-reflog and rs/ref-transaction-rename.)\n\n Follow-up on rs/ref-transaction series to use the packed-ref to\n achieve atomicity when multiple refs are involved.\n\n No more nitpicks and better design suggestions?\n\n\n* rs/ref-transaction-rename (2014-08-27) 6 commits\n - ### rs/ref-transaction-rename\n - refs.c: rollback the lockfile before we die() in repack_without_refs\n - refs.c: update rename_ref to use a transaction\n - refs.c: use packed refs when deleting refs during a transaction\n - refs.c: return error instead of dying when locking fails during transaction\n - refs.c: allow passing raw git_committer_info as email to _update_reflog\n (this branch is used by rs/ref-transaction-multi; uses rs/ref-transaction, rs/ref-transaction-1 and rs/ref-transaction-reflog.)\n\n Follow-up on rs/ref-transaction series to make renaming a ref\n transactional (i.e. \"delete old and create new\" should not leave\n an in-between state behind when it fails).\n\n No more nitpicks and better design suggestions?\n\n\n* rs/ref-transaction-reflog (2014-08-27) 16 commits\n - ### rs/ref-transaction-reflog\n - refs.c: allow deleting refs with a broken sha1\n - refs.c: remove lock_any_ref_for_update\n - refs.c: make unlock_ref/close_ref/commit_ref static\n - refs.c: rename log_ref_setup to create_reflog\n - reflog.c: use a reflog transaction when writing during expire\n - refs.c: allow multiple reflog updates during a single transaction\n - refs.c: only write reflog update if msg is non-NULL\n - refs.c: add a flag to allow reflog updates to truncate the log\n - refs.c: add a transaction function to append a reflog entry\n - lockfile.c: make hold_lock_file_for_append preserve meaningful errno\n - refs.c: add a function to append a reflog entry to a fd\n - refs.c: add a new update_type field to ref_update\n - refs.c: rename the transaction functions\n - refs.c: make ref_transaction_delete a wrapper for ref_transaction_update\n - refs.c: make ref_transaction_create a wrapper to ref_transaction_update\n (this branch is used by rs/ref-transaction-multi and rs/ref-transaction-rename; uses rs/ref-transaction and rs/ref-transaction-1.)\n\n Cover updates to reflog with the same transaction mechanism as used\n for reflog manipulations.\n\n No more nitpicks and better design suggestions?\n\n\n* jc/not-mingw-cygwin (2014-07-21) 2 commits\n  (merged to 'next' on 2014-08-29 at 0d00bb7)\n + test prerequisites: enumerate with commas\n + test prerequisites: eradicate NOT_FOO\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 Will merge to 'master'.\n\n\n* rs/ref-transaction-1 (2014-08-27) 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\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, rs/ref-transaction-multi, rs/ref-transaction-reflog and rs/ref-transaction-rename.)\n\n The second batch of the transactional ref update series.\n A hopefully final reroll exists but haven't picked it up yet.\n\n\n* dt/cache-tree-repair (2014-09-02) 5 commits\n - cache-tree: propagate invalidation up when punting\n  (merged to 'next' on 2014-08-26 at 6faccdb)\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 Originally merged to 'next' on 2014-07-21\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 The tip one is a proposed fix for $gmane/256285, but it is not\n quite right yet.\n\n\n* hv/submodule-config (2014-06-30) 4 commits\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 Kicked back to 'pu'.\n\n\n* rs/ref-transaction (2014-08-27) 14 commits\n - ### rs/ref-transaction\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 - ### rs/ref-transaction-1\n (this branch is used by rs/ref-transaction-multi, rs/ref-transaction-reflog and rs/ref-transaction-rename; 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":"248773","messageId":"5406B4EF.3050301@kdbg.org","threadId":"37474","inReplyTo":"xmqqzjehy8vx.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2014-09-03T06:27:59Z","receivedAt":"2014-09-03T06:27:59Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 03.09.2014 00:06, schrieb Junio C Hamano:\n> * jt/timer-settime (2014-08-29) 9 commits\n>  - use timer_settime() for new platforms\n>  - autoconf: check for timer_settime()\n>  - autoconf: check for struct itimerspec\n>  - autoconf: check for struct sigevent\n>  - autoconf: check for struct timespec\n>  - autoconf: check for timer_t\n>  - autoconf: check for setitimer()\n>  - autoconf: check for struct itimerval\n>  - git-compat-util.h: add missing semicolon after struct itimerval\n> \n>  Need a rerolled one.\n\nYes. Please mark the MinGW build as not having timer_settime. Better\nyet, implement it in compat/mingw.c to replace its setitimer()\nimplementation.\n\nAs a bug report, currently, I get\n\n    CC progress.o\nprogress.c: In function 'set_progress_signal':\nprogress.c:66: error: 'CLOCK_MONOTONIC' undeclared (first use in this\nfunction)\n\neven though I have NO_TIMER_SETTIME set in my config.mak (but no other\nof new configuration options that this series introduces).\n\nBut IMHO, this topic goes in a wrong direction. \"Avoid deprecated\ninterfaces\" is way overrated. It would be preferable (IMHO) to implement\nsetitimer() in compat/ for systems that don't have it.\n\n-- Hannes\n"},{"id":"248793","messageId":"540761D5.5040501@web.de","threadId":"37474","inReplyTo":"5406B4EF.3050301@kdbg.org","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Torsten Bögershausen","fromEmail":"tboegi@web.de","sentAt":"2014-09-03T18:45:41Z","receivedAt":"2014-09-03T18:45:41Z","isPatch":false,"sender":{"key":"tboegi@web.de","avatar":"https://avatars.githubusercontent.com/u/7138363?v=4"},"body":"On 2014-09-03 08.27, Johannes Sixt wrote:\n> Am 03.09.2014 00:06, schrieb Junio C Hamano:\n>> * jt/timer-settime (2014-08-29) 9 commits\n>>  - use timer_settime() for new platforms\n>>  - autoconf: check for timer_settime()\n>>  - autoconf: check for struct itimerspec\n>>  - autoconf: check for struct sigevent\n>>  - autoconf: check for struct timespec\n>>  - autoconf: check for timer_t\n>>  - autoconf: check for setitimer()\n>>  - autoconf: check for struct itimerval\n>>  - git-compat-util.h: add missing semicolon after struct itimerval\n>>\n>>  Need a rerolled one.\n> \n> Yes. Please mark the MinGW build as not having timer_settime. Better\n> yet, implement it in compat/mingw.c to replace its setitimer()\n> implementation.\n> \n> As a bug report, currently, I get\n> \n>     CC progress.o\n> progress.c: In function 'set_progress_signal':\n> progress.c:66: error: 'CLOCK_MONOTONIC' undeclared (first use in this\n> function)\n> \n> even though I have NO_TIMER_SETTIME set in my config.mak (but no other\n> of new configuration options that this series introduces).\n> \n> But IMHO, this topic goes in a wrong direction. \"Avoid deprecated\n> interfaces\" is way overrated. It would be preferable (IMHO) to implement\n> setitimer() in compat/ for systems that don't have it.\n> \n> -- Hannes\n \nI tend to agree:\n\ngrep \"ifeq.*uname_S\" config.mak.uname  | wc\nreports 21 different OS versions, where Git can use setitimer(),\nand that has been working quite well.\n\nThe getitimer() function call appeared in 4.2BSD, and even if\nPOSIX papers recommends the use of timers API (timer_gettime(2), timer_settime(2),\nthe current implementation in real existing OS may stay available for a long time.\n\nThe patch-series is addressing one single system.\n\nCould we think about writing a setitimer() implementation which uses\nthe new POSIX timer_settime(2) for systems which do not have getitimer() ?\n\nOr is somebody able to test all platforms which currently are supported by Git ?\n"},{"id":"248795","messageId":"xmqqoauwy0lz.fsf@gitster.dls.corp.google.com","threadId":"37474","inReplyTo":"5406B4EF.3050301@kdbg.org","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-09-03T19:18:00Z","receivedAt":"2014-09-03T19:18:00Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <j6t@kdbg.org> writes:\n\n> But IMHO, this topic goes in a wrong direction. \"Avoid deprecated\n> interfaces\" is way overrated. It would be preferable (IMHO) to implement\n> setitimer() in compat/ for systems that don't have it.\n\nI think I agree.\n\nAdding compat/setitimer.c that implements git_setitimer() in terms\nof whatever is available on the platform and #define calls to\nsetitimer() away to git_setitimer() would be a lot less intrusive\nchange than the series posted.\n\nThanks.\n"},{"id":"248798","messageId":"1409772619.28694.0.camel@jekeller-desk1.amr.corp.intel.com","threadId":"37474","inReplyTo":"xmqqoauwy0lz.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Keller, Jacob E","fromEmail":"jacob.e.keller@intel.com","sentAt":"2014-09-03T19:30:19Z","receivedAt":"2014-09-03T19:30:19Z","isPatch":false,"sender":{"key":"jacob.e.keller@intel.com","avatar":"https://avatars.githubusercontent.com/u/874719?v=4"},"body":"On Wed, 2014-09-03 at 12:18 -0700, Junio C Hamano wrote:\n> Johannes Sixt <j6t@kdbg.org> writes:\n> \n> > But IMHO, this topic goes in a wrong direction. \"Avoid deprecated\n> > interfaces\" is way overrated. It would be preferable (IMHO) to implement\n> > setitimer() in compat/ for systems that don't have it.\n> \n> I think I agree.\n> \n> Adding compat/setitimer.c that implements git_setitimer() in terms\n> of whatever is available on the platform and #define calls to\n> setitimer() away to git_setitimer() would be a lot less intrusive\n> change than the series posted.\n> \n> Thanks.\n> --\n> To unsubscribe from this list: send the line \"unsubscribe git\" in\n> the body of a message to majordomo@vger.kernel.org\n> More majordomo info at  http://vger.kernel.org/majordomo-info.html\n\nI suppose overall this makes more sense :) That shouldn't be difficult\nto do.\n\nRegards,\nJake\n"},{"id":"248834","messageId":"CACsJy8C_=aNX9LT2V_zhw++tC22C5SDfwbpTS=juONMxwcV9pA@mail.gmail.com","threadId":"37474","inReplyTo":"xmqqzjehy8vx.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Duy Nguyen","fromEmail":"pclouds@gmail.com","sentAt":"2014-09-04T13:46:53Z","receivedAt":"2014-09-04T13:46:53Z","isPatch":false,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, Sep 3, 2014 at 5:06 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> * nd/multiple-work-trees (2014-07-29) 39 commits\n>\n>  Reroll posted, but haven't picked up yet.  How would this interact\n>  with rr/transaction series which is pretty much all about the refs?\n\nHaven't checked out that topic yet. But ref changes in\nmultiple-work-trees are to make sure ref path construction goess\nthrough git_path(), and some cleaning up after strbuf_git_path() is\nintroduced. So basically textual conflicts only.\n-- \nDuy\n"},{"id":"248841","messageId":"xmqqtx4nuy5k.fsf@gitster.dls.corp.google.com","threadId":"37474","inReplyTo":"CACsJy8C_=aNX9LT2V_zhw++tC22C5SDfwbpTS=juONMxwcV9pA@mail.gmail.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-09-04T16:51:35Z","receivedAt":"2014-09-04T16:51:35Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Duy Nguyen <pclouds@gmail.com> writes:\n\n> On Wed, Sep 3, 2014 at 5:06 AM, Junio C Hamano <gitster@pobox.com> wrote:\n>> * nd/multiple-work-trees (2014-07-29) 39 commits\n>>\n>>  Reroll posted, but haven't picked up yet.  How would this interact\n>>  with rr/transaction series which is pretty much all about the refs?\n>\n> Haven't checked out that topic yet. But ref changes in\n> multiple-work-trees are to make sure ref path construction goess\n> through git_path(), and some cleaning up after strbuf_git_path() is\n> introduced. So basically textual conflicts only.\n\nUp to the point that is queued on 'pu', the other topic(s) still\nkeep the assumption that all refs are files in $GIT_DIR/refs/, and I\nthink I managed the textual conflicts correctly in 'pu' before.\n\nBut starting from $gmane/255476 the assumption gradually gets lifted\nand eventually we may have refs and reflogs expressed in a different\nbackend, without these files that represent the refs at all.\n\nI am not yet sure how this \"I have $GIR_DIR/ but that is not a real\none but borrows most of the stuff from elsewhere\" meshes with that\nnew world.\n"},{"id":"248842","messageId":"xmqqmwafux3y.fsf@gitster.dls.corp.google.com","threadId":"37474","inReplyTo":"xmqqtx4nuy5k.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-09-04T17:14:09Z","receivedAt":"2014-09-04T17:14:09Z","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> Duy Nguyen <pclouds@gmail.com> writes:\n>\n>> On Wed, Sep 3, 2014 at 5:06 AM, Junio C Hamano <gitster@pobox.com> wrote:\n>>> * nd/multiple-work-trees (2014-07-29) 39 commits\n>>>\n>>>  Reroll posted, but haven't picked up yet.  How would this interact\n>>>  with rr/transaction series which is pretty much all about the refs?\n>>\n>> Haven't checked out that topic yet. But ref changes in\n>> multiple-work-trees are to make sure ref path construction goess\n>> through git_path(), and some cleaning up after strbuf_git_path() is\n>> introduced. So basically textual conflicts only.\n>\n> Up to the point that is queued on 'pu', the other topic(s) still\n> keep the assumption that all refs are files in $GIT_DIR/refs/, and I\n> think I managed the textual conflicts correctly in 'pu' before.\n\nOne point that caused unnecessary conflict resolution was that the\ntransaction series lacked \"let's use strbuf to hold paths\".  This\nhad two immediate side effects, i.e. \"instead of returning upon\nerrors, jump to the end with 'goto done/fail' for necessary\nclean-up\" and \"get rid of git_snpath and use strbuf_git_path\", both\nof which are good general clean-ups, even if they weren't related to\nthe multiple worktrees feature, that conflicted with the transaction\nseries when getting merged.\n\nYou can see the interactions by checking\n\n    $ git show 'pu^{/^Merge branch .nd/multi}' refs.c\n\nPerhaps these three changes, without the addition of the multiple\nworktree feature, should come first as a general clean-up on top of\nwhich both topics can be built?\n\n> But starting from $gmane/255476 the assumption gradually gets lifted\n> and eventually we may have refs and reflogs expressed in a different\n> backend, without these files that represent the refs at all.\n>\n> I am not yet sure how this \"I have $GIR_DIR/ but that is not a real\n> one but borrows most of the stuff from elsewhere\" meshes with that\n> new world.\n"},{"id":"248845","messageId":"xmqqa96fuwko.fsf@gitster.dls.corp.google.com","threadId":"37474","inReplyTo":"xmqqmwafux3y.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2014-09-04T17:25:43Z","receivedAt":"2014-09-04T17:25:43Z","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> You can see the interactions by checking\n>\n>     $ git show 'pu^{/^Merge branch .nd/multi}' refs.c\n\nHere is how it may look like.\n\n    Merge branch 'nd/multiple-work-trees' into pu\n\ndiff --cc refs.c\nindex b50b329,00b2312..f04d934\n--- a/refs.c\n+++ b/refs.c\n@@@ -1359,34 -1533,33 +1359,38 @@@ static const char *handle_missing_loose\n  \t}\n  }\n  \n -const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int reading, int *flag)\n +/* This function needs to return a meaningful errno on failure */\n +const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int flags, int *ref_flag)\n  {\n+ \tstruct strbuf sb_path = STRBUF_INIT;\n  \tint depth = MAXDEPTH;\n  \tssize_t len;\n  \tchar buffer[256];\n  \tstatic char refname_buffer[256];\n+ \tconst char *ret;\n  \n -\tif (flag)\n -\t\t*flag = 0;\n +\tif (ref_flag)\n +\t\t*ref_flag = 0;\n  \n -\tif (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL))\n +\tif (!(flags & RESOLVE_REF_ALLOW_BAD_NAME) &&\n +\t    check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {\n +\t\terrno = EINVAL;\n  \t\treturn NULL;\n -\n +\t}\n  \tfor (;;) {\n- \t\tchar path[PATH_MAX];\n+ \t\tconst char *path;\n  \t\tstruct stat st;\n  \t\tchar *buf;\n  \t\tint fd;\n  \n -\t\tif (--depth < 0)\n +\t\tif (--depth < 0) {\n +\t\t\terrno = ELOOP;\n- \t\t\treturn NULL;\n+ \t\t\tgoto fail;\n +\t\t}\n  \n- \t\tgit_snpath(path, sizeof(path), \"%s\", refname);\n+ \t\tstrbuf_reset(&sb_path);\n+ \t\tstrbuf_git_path(&sb_path, \"%s\", refname);\n+ \t\tpath = sb_path.buf;\n  \n  \t\t/*\n  \t\t * We might have to loop back here to avoid a race\n@@@ -1400,11 -1573,11 +1404,12 @@@\n  \tstat_ref:\n  \t\tif (lstat(path, &st) < 0) {\n  \t\t\tif (errno == ENOENT)\n- \t\t\t\treturn handle_missing_loose_ref(refname, sha1,\n+ \t\t\t\tret = handle_missing_loose_ref(refname, sha1,\n -\t\t\t\t\t\t\t       reading, flag);\n +\t\t\t\t\t\tflags & RESOLVE_REF_READING,\n +\t\t\t\t\t\tref_flag);\n  \t\t\telse\n- \t\t\t\treturn NULL;\n+ \t\t\t\tret = NULL;\n+ \t\t\tgoto done;\n  \t\t}\n  \n  \t\t/* Follow \"normalized\" - ie \"refs/..\" symlinks by hand */\n@@@ -1444,16 -1617,13 +1449,17 @@@\n  \t\t\t\t/* inconsistent with lstat; retry */\n  \t\t\t\tgoto stat_ref;\n  \t\t\telse\n- \t\t\t\treturn NULL;\n+ \t\t\t\tgoto fail;\n  \t\t}\n+ \n  \t\tlen = read_in_full(fd, buffer, sizeof(buffer)-1);\n -\t\tclose(fd);\n -\t\tif (len < 0)\n +\t\tif (len < 0) {\n +\t\t\tint save_errno = errno;\n +\t\t\tclose(fd);\n +\t\t\terrno = save_errno;\n- \t\t\treturn NULL;\n+ \t\t\tgoto fail;\n +\t\t}\n +\t\tclose(fd);\n  \t\twhile (len && isspace(buffer[len-1]))\n  \t\t\tlen--;\n  \t\tbuffer[len] = '\\0';\n@@@ -1468,31 -1638,35 +1474,37 @@@\n  \t\t\t */\n  \t\t\tif (get_sha1_hex(buffer, sha1) ||\n  \t\t\t    (buffer[40] != '\\0' && !isspace(buffer[40]))) {\n -\t\t\t\tif (flag)\n -\t\t\t\t\t*flag |= REF_ISBROKEN;\n +\t\t\t\tif (ref_flag)\n +\t\t\t\t\t*ref_flag |= REF_ISBROKEN;\n +\t\t\t\terrno = EINVAL;\n- \t\t\t\treturn NULL;\n+ \t\t\t\tgoto fail;\n  \t\t\t}\n- \t\t\treturn refname;\n+ \t\t\tret = refname;\n+ \t\t\tgoto done;\n  \t\t}\n -\t\tif (flag)\n -\t\t\t*flag |= REF_ISSYMREF;\n +\t\tif (ref_flag)\n +\t\t\t*ref_flag |= REF_ISSYMREF;\n  \t\tbuf = buffer + 4;\n  \t\twhile (isspace(*buf))\n  \t\t\tbuf++;\n  \t\tif (check_refname_format(buf, REFNAME_ALLOW_ONELEVEL)) {\n -\t\t\tif (flag)\n -\t\t\t\t*flag |= REF_ISBROKEN;\n +\t\t\tif (ref_flag)\n +\t\t\t\t*ref_flag |= REF_ISBROKEN;\n +\t\t\terrno = EINVAL;\n- \t\t\treturn NULL;\n+ \t\t\tgoto fail;\n  \t\t}\n  \t\trefname = strcpy(refname_buffer, buf);\n  \t}\n+ fail:\n+ \tret = NULL;\n+ done:\n+ \tstrbuf_release(&sb_path);\n+ \treturn ret;\n  }\n  \n -char *resolve_refdup(const char *ref, unsigned char *sha1, int reading, int *flag)\n +char *resolve_refdup(const char *ref, unsigned char *sha1, int flags, int *ref_flag)\n  {\n -\tconst char *ret = resolve_ref_unsafe(ref, sha1, reading, flag);\n +\tconst char *ret = resolve_ref_unsafe(ref, sha1, flags, ref_flag);\n  \treturn ret ? xstrdup(ret) : NULL;\n  }\n  \n@@@ -2106,16 -2263,11 +2118,16 @@@ int dwim_log(const char *str, int len, \n  \treturn logs_found;\n  }\n  \n +/*\n + * Locks a \"refs/\" ref returning the lock on success and NULL on failure.\n + * On failure errno is set to something meaningful.\n + */\n  static struct ref_lock *lock_ref_sha1_basic(const char *refname,\n  \t\t\t\t\t    const unsigned char *old_sha1,\n -\t\t\t\t\t    int flags, int *type_p)\n +\t\t\t\t\t    int flags, int *type_p,\n +\t\t\t\t\t    const char **skip, int skipnum)\n  {\n- \tchar *ref_file;\n+ \tconst char *ref_file;\n  \tconst char *orig_refname = refname;\n  \tstruct ref_lock *lock;\n  \tint last_errno = 0;\n@@@ -2750,52 -2952,41 +2762,57 @@@ static int copy_msg(char *buf, const ch\n  \treturn cp - buf;\n  }\n  \n -int log_ref_setup(const char *refname, struct strbuf *logfile)\n +/* This function must set a meaningful errno on failure */\n +int create_reflog(const char *refname)\n  {\n  \tint logfd, oflags = O_APPEND | O_WRONLY;\n- \tchar logfile[PATH_MAX];\n- \n- \tgit_snpath(logfile, sizeof(logfile), \"logs/%s\", refname);\n- \tif (starts_with(refname, \"refs/heads/\") ||\n- \t    starts_with(refname, \"refs/remotes/\") ||\n- \t    starts_with(refname, \"refs/notes/\") ||\n- \t    !strcmp(refname, \"HEAD\")) {\n- \t\tif (safe_create_leading_directories(logfile) < 0) {\n++\tstruct strbuf logfile = STRBUF_INIT;\n+ \n -\tstrbuf_git_path(logfile, \"logs/%s\", refname);\n++\tstrbuf_git_path(&logfile, \"logs/%s\", refname);\n+ \tif (log_all_ref_updates &&\n+ \t    (starts_with(refname, \"refs/heads/\") ||\n+ \t     starts_with(refname, \"refs/remotes/\") ||\n+ \t     starts_with(refname, \"refs/notes/\") ||\n+ \t     !strcmp(refname, \"HEAD\"))) {\n -\t\tif (safe_create_leading_directories(logfile->buf) < 0)\n -\t\t\treturn error(\"unable to create directory for %s\",\n -\t\t\t\t     logfile->buf);\n++\t\tif (safe_create_leading_directories(logfile.buf) < 0) {\n +\t\t\tint save_errno = errno;\n- \t\t\terror(\"unable to create directory for %s\", logfile);\n++\t\t\terror(\"unable to create directory for %s\", logfile.buf);\n++\t\t\tstrbuf_release(&logfile);\n +\t\t\terrno = save_errno;\n +\t\t\treturn -1;\n +\t\t}\n  \t\toflags |= O_CREAT;\n  \t}\n  \n- \tlogfd = open(logfile, oflags, 0666);\n -\tlogfd = open(logfile->buf, oflags, 0666);\n++\tlogfd = open(logfile.buf, oflags, 0666);\n  \tif (logfd < 0) {\n  \t\tif (!(oflags & O_CREAT) && errno == ENOENT)\n  \t\t\treturn 0;\n  \n  \t\tif ((oflags & O_CREAT) && errno == EISDIR) {\n- \t\t\tif (remove_empty_directories(logfile)) {\n -\t\t\tif (remove_empty_directories(logfile->buf)) {\n -\t\t\t\treturn error(\"There are still logs under '%s'\",\n -\t\t\t\t\t     logfile->buf);\n++\t\t\tif (remove_empty_directories(logfile.buf)) {\n +\t\t\t\tint save_errno = errno;\n +\t\t\t\terror(\"There are still logs under '%s'\",\n- \t\t\t\t      logfile);\n++\t\t\t\t      logfile.buf);\n++\t\t\t\tstrbuf_release(&logfile);\n +\t\t\t\terrno = save_errno;\n +\t\t\t\treturn -1;\n  \t\t\t}\n- \t\t\tlogfd = open(logfile, oflags, 0666);\n -\t\t\tlogfd = open(logfile->buf, oflags, 0666);\n++\t\t\tlogfd = open(logfile.buf, oflags, 0666);\n  \t\t}\n  \n -\t\tif (logfd < 0)\n -\t\t\treturn error(\"Unable to append to %s: %s\",\n -\t\t\t\t     logfile->buf, strerror(errno));\n +\t\tif (logfd < 0) {\n +\t\t\tint save_errno = errno;\n- \t\t\terror(\"Unable to append to %s: %s\", logfile,\n++\t\t\terror(\"Unable to append to %s: %s\", logfile.buf,\n +\t\t\t      strerror(errno));\n++\t\t\tstrbuf_release(&logfile);\n +\t\t\terrno = save_errno;\n +\t\t\treturn -1;\n +\t\t}\n  \t}\n  \n- \tadjust_shared_perm(logfile);\n -\tadjust_shared_perm(logfile->buf);\n++\tadjust_shared_perm(logfile.buf);\n++\tstrbuf_release(&logfile);\n  \tclose(logfd);\n  \treturn 0;\n  }\n@@@ -2817,54 -3023,18 +2834,58 @@@ static int log_ref_write_fd(int fd, con\n  \t\t      committer);\n  \tif (msglen)\n  \t\tlen += copy_msg(logrec + len - 1, msg) - 1;\n -\twritten = len <= maxlen ? write_in_full(logfd, logrec, len) : -1;\n +\n +\twritten = len <= maxlen ? write_in_full(fd, logrec, len) : -1;\n  \tfree(logrec);\n -\tif (close(logfd) != 0 || written != len) {\n -\t\terror(\"Unable to append to %s\", log_file);\n -\t\tresult = -1;\n -\t}\n -done:\n -\tstrbuf_release(&sb_log_file);\n -\treturn result;\n +\tif (written != len)\n +\t\treturn -1;\n +\n +\treturn 0;\n +}\n +\n +static int log_ref_write(const char *refname, const unsigned char *old_sha1,\n +\t\t\t const unsigned char *new_sha1, const char *msg)\n +{\n +\tint logfd, result = 0, oflags = O_APPEND | O_WRONLY;\n- \tchar log_file[PATH_MAX];\n++\tstruct strbuf logfile = STRBUF_INIT;\n++\tint status = 0;\n +\n +\tif (log_all_ref_updates < 0)\n +\t\tlog_all_ref_updates = !is_bare_repository();\n +\n +\tif (log_all_ref_updates && !reflog_exists(refname))\n +\t\tresult = create_reflog(refname);\n +\n +\tif (result)\n +\t\treturn result;\n +\n- \tgit_snpath(log_file, sizeof(log_file), \"logs/%s\", refname);\n++\tstrbuf_git_path(&logfile, \"logs/%s\", refname);\n +\n- \tlogfd = open(log_file, oflags);\n++\tlogfd = open(logfile.buf, oflags);\n +\tif (logfd < 0)\n- \t\treturn 0;\n++\t\tgoto fini;\n +\tresult = log_ref_write_fd(logfd, old_sha1, new_sha1,\n +\t\t\t\t  git_committer_info(0), msg);\n +\tif (result) {\n +\t\tint save_errno = errno;\n +\t\tclose(logfd);\n- \t\terror(\"Unable to append to %s\", log_file);\n++\t\terror(\"Unable to append to %s\", logfile.buf);\n +\t\terrno = save_errno;\n- \t\treturn -1;\n++\t\tstatus = -1;\n++\t\tgoto fini;\n +\t}\n +\tif (close(logfd)) {\n +\t\tint save_errno = errno;\n- \t\terror(\"Unable to append to %s\", log_file);\n++\t\terror(\"Unable to append to %s\", logfile.buf);\n +\t\terrno = save_errno;\n- \t\treturn -1;\n++\t\tstatus = -1;\n +\t}\n- \treturn 0;\n++fini:\n++\tstrbuf_release(&logfile);\n++\treturn status;\n  }\n  \n -static int is_branch(const char *refname)\n +int is_branch(const char *refname)\n  {\n  \treturn !strcmp(refname, \"HEAD\") || starts_with(refname, \"refs/heads/\");\n  }\n"},{"id":"248884","messageId":"CACsJy8CpxEn9Ubh1HzmMxY09agFqPbu0qEvY0PHFMSBj1Hrv3w@mail.gmail.com","threadId":"37474","inReplyTo":"xmqqtx4nuy5k.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Duy Nguyen","fromEmail":"pclouds@gmail.com","sentAt":"2014-09-05T00:47:37Z","receivedAt":"2014-09-05T00:47:37Z","isPatch":false,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Thu, Sep 4, 2014 at 11:51 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> Duy Nguyen <pclouds@gmail.com> writes:\n>\n>> On Wed, Sep 3, 2014 at 5:06 AM, Junio C Hamano <gitster@pobox.com> wrote:\n>>> * nd/multiple-work-trees (2014-07-29) 39 commits\n>>>\n>>>  Reroll posted, but haven't picked up yet.  How would this interact\n>>>  with rr/transaction series which is pretty much all about the refs?\n>>\n>> Haven't checked out that topic yet. But ref changes in\n>> multiple-work-trees are to make sure ref path construction goess\n>> through git_path(), and some cleaning up after strbuf_git_path() is\n>> introduced. So basically textual conflicts only.\n>\n> Up to the point that is queued on 'pu', the other topic(s) still\n> keep the assumption that all refs are files in $GIT_DIR/refs/, and I\n> think I managed the textual conflicts correctly in 'pu' before.\n>\n> But starting from $gmane/255476 the assumption gradually gets lifted\n> and eventually we may have refs and reflogs expressed in a different\n> backend, without these files that represent the refs at all.\n>\n> I am not yet sure how this \"I have $GIR_DIR/ but that is not a real\n> one but borrows most of the stuff from elsewhere\" meshes with that\n> new world.\n\nThe refs/* path conversion should stay with the current filesystem\nbackend. How to share new backends in multiple worktrees is another\ninteresting problem. But I should stop saying any more until I read\nthis backend-struct-db  topic.\n-- \nDuy\n"},{"id":"248885","messageId":"CACsJy8AyrGeLJ-B+81ZNQaKGvNV5YNnZ_RWUumvhKR-tvTrg9A@mail.gmail.com","threadId":"37474","inReplyTo":"xmqqmwafux3y.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Duy Nguyen","fromEmail":"pclouds@gmail.com","sentAt":"2014-09-05T01:18:34Z","receivedAt":"2014-09-05T01:18:34Z","isPatch":false,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Fri, Sep 5, 2014 at 12:14 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> Junio C Hamano <gitster@pobox.com> writes:\n>\n>> Duy Nguyen <pclouds@gmail.com> writes:\n>>\n>>> On Wed, Sep 3, 2014 at 5:06 AM, Junio C Hamano <gitster@pobox.com> wrote:\n>>>> * nd/multiple-work-trees (2014-07-29) 39 commits\n>>>>\n>>>>  Reroll posted, but haven't picked up yet.  How would this interact\n>>>>  with rr/transaction series which is pretty much all about the refs?\n>>>\n>>> Haven't checked out that topic yet. But ref changes in\n>>> multiple-work-trees are to make sure ref path construction goess\n>>> through git_path(), and some cleaning up after strbuf_git_path() is\n>>> introduced. So basically textual conflicts only.\n>>\n>> Up to the point that is queued on 'pu', the other topic(s) still\n>> keep the assumption that all refs are files in $GIT_DIR/refs/, and I\n>> think I managed the textual conflicts correctly in 'pu' before.\n>\n> One point that caused unnecessary conflict resolution was that the\n> transaction series lacked \"let's use strbuf to hold paths\".  This\n> had two immediate side effects, i.e. \"instead of returning upon\n> errors, jump to the end with 'goto done/fail' for necessary\n> clean-up\" and \"get rid of git_snpath and use strbuf_git_path\", both\n> of which are good general clean-ups, even if they weren't related to\n> the multiple worktrees feature, that conflicted with the transaction\n> series when getting merged.\n>\n> You can see the interactions by checking\n>\n>     $ git show 'pu^{/^Merge branch .nd/multi}' refs.c\n>\n> Perhaps these three changes, without the addition of the multiple\n> worktree feature, should come first as a general clean-up on top of\n> which both topics can be built?\n\nIf that makes your life easier, sure. Changes up until (and including)\nc88c438 (setup.c: convert is_git_directory() to use strbuf -\n2014-08-30) could be considered cleanups. After that commit, refs.c is\nnot touched. Will look at your conflict resultion later..\n-- \nDuy\n"},{"id":"258549","messageId":"1427377615412-7627922.post@n2.nabble.com","threadId":"37474","inReplyTo":"xmqqzjehy8vx.fsf@gitster.dls.corp.google.com","subject":"Re: What's cooking in git.git (Sep 2014, #01; Tue, 2)","fromName":"Tommy38","fromEmail":"rhea.woods91@gmail.com","sentAt":"2015-03-26T13:46:55Z","receivedAt":"2015-03-26T13:46:55Z","isPatch":false,"sender":{"key":"rhea.woods91@gmail.com","avatar":null},"body":"That’s great dear, can you share link for those  cooking videos\n<http://grokker.com/cooking>   too. Actually I am a new learner and I need\ndetailed information to execute everything properly. Thanks in advance for\nyour help.\n\n\n\n\n--\nView this message in context: http://git.661346.n2.nabble.com/What-s-cooking-in-git-git-Sep-2014-01-Tue-2-tp7617955p7627922.html\nSent from the git mailing list archive at Nabble.com.\n"}]}