diff -u -r ../git-2.9.0/config.c ./config.c --- ../git-2.9.0/config.c 2016-06-13 15:07:49.000000000 -0400 +++ ./config.c 2016-06-19 20:16:44.473791157 -0400 @@ -49,6 +49,25 @@ */ static struct config_set the_config_set; +/* + * Protecting the project-specific git configuration file (.git/config) is + * not possible on a shared file system on Android, which on an unpatched + * git causes operations such as clone to fail with an error message. + * + * For the Termux git package we introduce a warning about the configuration + * file being unprotected, but proceed in order to allow git repositories + * to be cloned to shared storage accessible to other apps. + */ +static void termux_warn_once_about_lockfile() +{ + static int already_warned; + if (!already_warned) { + warning("Cannot protect .git/config on this file system" + " - do not store sensitive information here."); + already_warned = 1; + } +} + static int config_file_fgetc(struct config_source *conf) { return getc_unlocked(conf->u.file); @@ -2123,9 +2142,13 @@ in_fd = -1; if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) { +#ifdef __ANDROID__ + termux_warn_once_about_lockfile(); +#else error_errno("chmod on %s failed", get_lock_file_path(lock)); ret = CONFIG_NO_WRITE; goto out_free; +#endif } if (store.seen == 0) @@ -2330,9 +2353,13 @@ fstat(fileno(config_file), &st); if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) { +#ifdef __ANDROID__ + termux_warn_once_about_lockfile(); +#else ret = error_errno("chmod on %s failed", get_lock_file_path(lock)); goto out; +#endif } while (fgets(buf, sizeof(buf), config_file)) {