git: Patch to enable repos on shared filesystems
[termux-packages] / packages / git / config.c.patch
CommitLineData
11c62dd2
FF
1diff -u -r ../git-2.8.1/config.c ./config.c
2--- ../git-2.8.1/config.c 2016-04-03 15:07:18.000000000 -0400
3+++ ./config.c 2016-04-21 18:37:26.707906688 -0400
4@@ -49,6 +49,25 @@
5 */
6 static struct config_set the_config_set;
7
8+/*
9+ * Protecting the project-specific git configuration file (.git/config) is
10+ * not possible on a shared file system on Android, which on an unpatched
11+ * git causes operations such as clone to fail with an error message.
12+ *
13+ * For the Termux git package we introduce a warning about the configuration
14+ * file being unprotected, but proceed in order to allow git repositories
15+ * to be cloned to shared storage accessible to other apps.
16+ */
17+static void termux_warn_once_about_lockfile()
18+{
19+ static int already_warned;
20+ if (!already_warned) {
21+ warning("Cannot protect .git/config on this file system"
22+ " - do not store sensitive information here.");
23+ already_warned = 1;
24+ }
25+}
26+
27 static int config_file_fgetc(struct config_source *conf)
28 {
29 return getc_unlocked(conf->u.file);
30@@ -2125,10 +2147,14 @@
31 in_fd = -1;
32
33 if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) {
34+#ifdef __ANDROID__
35+ termux_warn_once_about_lockfile();
36+#else
37 error("chmod on %s failed: %s",
38 get_lock_file_path(lock), strerror(errno));
39 ret = CONFIG_NO_WRITE;
40 goto out_free;
41+#endif
42 }
43
44 if (store.seen == 0)
45@@ -2330,9 +2356,13 @@
46 fstat(fileno(config_file), &st);
47
48 if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) {
49+#ifdef __ANDROID__
50+ termux_warn_once_about_lockfile();
51+#else
52 ret = error("chmod on %s failed: %s",
53 get_lock_file_path(lock), strerror(errno));
54 goto out;
55+#endif
56 }
57
58 while (fgets(buf, sizeof(buf), config_file)) {