git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 13/19] pull: implement pulling into an unborn branch

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 10, 2015, 01:31 UTC
Message-ID
<xmqqoakouz5k.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1433314143-4478-14-git-send-email-pyokagan@gmail.com>
Paul Tan <pyokagan@gmail.com> writes:
Show 6 quoted lines
>  /**
> + * "Pulls into void" by branching off merge_head.
> + */
> +static int pull_into_void(unsigned char merge_head[GIT_SHA1_RAWSZ],
> +		unsigned char curr_head[GIT_SHA1_RAWSZ])
> +{

It is not wrong per-se, but is rather unusual (and misleading) to specify the array-ness and array-size of parameters. Our codebase tends to prefer spelling it like so instead:

	static int pull_into_void(unsigned char *merge_head,
			          unsigned char *curr_head)
	{
> +	/*
> +	 * Two-way merge: we claim the index is based on an empty tree,
s/claim/treat/ perhaps?
Show 29 quoted lines
> +	 * and try to fast-forward to HEAD. This ensures we will not lose
> +	 * index/worktree changes that the user already made on the unborn
> +	 * branch.
> +	 */
> +	if (checkout_fast_forward(EMPTY_TREE_SHA1_BIN, merge_head, 0))
> +		return 1;
> +
> +	if (update_ref("initial pull", "HEAD", merge_head, curr_head, 0, UPDATE_REFS_DIE_ON_ERR))
> +		return 1;
> +
> +	return 0;
> +}
> +
> +/**
>   * Runs git-merge, returning its exit status.
>   */
>  static int run_merge(void)
> @@ -475,5 +497,10 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
>  	if (!merge_heads.nr)
>  		die_no_merge_candidates(repo, refspecs);
>  
> -	return run_merge();
> +	if (is_null_sha1(orig_head)) {
> +		if (merge_heads.nr > 1)
> +			die(_("Cannot merge multiple branches into empty head."));
> +		return pull_into_void(*merge_heads.sha1, curr_head);
> +	} else
> +		return run_merge();
>  }
Sensible.
Previous: Paul TanNext: Paul Tan
Message 32 of 48 in “Make git-pull a builtin”
  1. 00/19 Make git-pull a builtinPaul Tan, Jun 3, 2015
  2. 01/19 parse-options-cb: implement parse_opt_pass_strbuf()Paul Tan, Jun 3, 2015
  3. Junio C HamanoJun 9, 2015
  4. 02/19 parse-options-cb: implement parse_opt_pass_argv_array()Paul Tan, Jun 3, 2015
  5. Stefan BellerJun 3, 2015
  6. Junio C HamanoJun 9, 2015
  7. Paul TanJun 10, 2015
  8. Junio C HamanoJun 10, 2015
  9. 03/19 argv-array: implement argv_array_pushv()Paul Tan, Jun 3, 2015
  10. 04/19 pull: implement skeletal builtin pullPaul Tan, Jun 3, 2015
  11. Junio C HamanoJun 10, 2015
  12. 05/19 pull: implement fetch + mergePaul Tan, Jun 3, 2015
  13. Junio C HamanoJun 9, 2015
  14. 06/19 pull: pass verbosity, --progress flags to fetch and mergePaul Tan, Jun 3, 2015
  15. Junio C HamanoJun 9, 2015
  16. 07/19 pull: pass git-merge's options to git-mergePaul Tan, Jun 3, 2015
  17. 08/19 pull: pass git-fetch's options to git-fetchPaul Tan, Jun 3, 2015
  18. Stefan BellerJun 3, 2015
  19. 09/19 pull: error on no merge candidatesPaul Tan, Jun 3, 2015
  20. Junio C HamanoJun 9, 2015
  21. Paul TanJun 13, 2015
  22. 10/19 pull: support pull.ff configPaul Tan, Jun 3, 2015
  23. Junio C HamanoJun 9, 2015
  24. 11/19 pull: check if in unresolved merge statePaul Tan, Jun 3, 2015
  25. Junio C HamanoJun 10, 2015
  26. Junio C HamanoJun 10, 2015
  27. Paul TanJun 10, 2015
  28. Junio C HamanoJun 10, 2015
  29. Paul TanJun 14, 2015
  30. 12/19 pull: fast-forward working tree if head is updatedPaul Tan, Jun 3, 2015
  31. 13/19 pull: implement pulling into an unborn branchPaul Tan, Jun 3, 2015
  32. Junio C HamanoJun 10, 2015
  33. 14/19 pull: set reflog messagePaul Tan, Jun 3, 2015
  34. 15/19 pull: teach git pull about --rebasePaul Tan, Jun 3, 2015
  35. Junio C HamanoJun 10, 2015
  36. Paul TanJun 10, 2015
  37. Junio C HamanoJun 10, 2015
  38. Paul TanJun 10, 2015
  39. Junio C HamanoJun 10, 2015
  40. Junio C HamanoJun 10, 2015
  41. 16/19 pull: configure --rebase via branch.<name>.rebase or pull.rebasePaul Tan, Jun 3, 2015
  42. 17/19 pull --rebase: exit early when the working directory is dirtyPaul Tan, Jun 3, 2015
  43. Kevin DaudtJun 3, 2015
  44. Kevin DaudtJun 10, 2015
  45. 18/19 pull --rebase: error on no merge candidate casesPaul Tan, Jun 3, 2015
  46. Stefan BellerJun 3, 2015
  47. 19/19 pull: remove redirection to git-pull.shPaul Tan, Jun 3, 2015
  48. Stefan BellerJun 3, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.