check-attr: there are only two possible line terminations
[gitweb.git] / builtin / pull.c
index 421a34de4b754437d0bceb6afbea3babd8ebf774..52606a84cebf1421f5378233d1915df5233c8737 100644 (file)
@@ -15,6 +15,7 @@
 #include "dir.h"
 #include "refs.h"
 #include "revision.h"
+#include "tempfile.h"
 #include "lockfile.h"
 
 enum rebase_type {
@@ -65,7 +66,7 @@ static int parse_opt_rebase(const struct option *opt, const char *arg, int unset
 }
 
 static const char * const pull_usage[] = {
-       N_("git pull [options] [<repository> [<refspec>...]]"),
+       N_("git pull [<options>] [<repository> [<refspec>...]]"),
        NULL
 };
 
@@ -111,7 +112,7 @@ static struct option pull_options[] = {
        /* Options passed to git-merge or git-rebase */
        OPT_GROUP(N_("Options related to merging")),
        { OPTION_CALLBACK, 'r', "rebase", &opt_rebase,
-         N_("false|true|preserve"),
+         "false|true|preserve",
          N_("incorporate changes by rebasing rather than merging"),
          PARSE_OPT_OPTARG, parse_opt_rebase },
        OPT_PASSTHRU('n', NULL, &opt_diffstat, NULL,
@@ -377,7 +378,7 @@ static void get_merge_heads(struct sha1_array *merge_heads)
 
        if (!(fp = fopen(filename, "r")))
                die_errno(_("could not open '%s' for reading"), filename);
-       while (strbuf_getline(&sb, fp, '\n') != EOF) {
+       while (strbuf_getline_lf(&sb, fp) != EOF) {
                if (get_sha1_hex(sb.buf, sha1))
                        continue;  /* invalid line: does not start with SHA1 */
                if (starts_with(sb.buf + GIT_SHA1_HEXSZ, "\tnot-for-merge\t"))
@@ -742,7 +743,7 @@ static int get_octopus_merge_base(unsigned char *merge_base,
        if (!result)
                return 1;
 
-       hashcpy(merge_base, result->item->object.sha1);
+       hashcpy(merge_base, result->item->object.oid.hash);
        return 0;
 }
 
@@ -798,13 +799,6 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
        unsigned char orig_head[GIT_SHA1_RAWSZ], curr_head[GIT_SHA1_RAWSZ];
        unsigned char rebase_fork_point[GIT_SHA1_RAWSZ];
 
-       if (!getenv("_GIT_USE_BUILTIN_PULL")) {
-               const char *path = mkpath("%s/git-pull", git_exec_path());
-
-               if (sane_execvp(path, (char **)argv) < 0)
-                       die_errno("could not exec %s", path);
-       }
-
        if (!getenv("GIT_REFLOG_ACTION"))
                set_reflog_message(argc, argv);
 
@@ -830,10 +824,14 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
                hashclr(orig_head);
 
        if (opt_rebase) {
+               int autostash = 0;
+
                if (is_null_sha1(orig_head) && !is_cache_unborn())
                        die(_("Updating an unborn branch with changes added to the index."));
 
-               die_on_unclean_work_tree(prefix);
+               git_config_get_bool("rebase.autostash", &autostash);
+               if (!autostash)
+                       die_on_unclean_work_tree(prefix);
 
                if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
                        hashclr(rebase_fork_point);