Warn cloners if there is no LICENSE* or COPYING* file that makes the license clear. This is a useful warning, because if there is no license somewhere, then local copyright laws (which forbid many uses) and terms of service apply - and the cloner may not be expecting that. Many projects accidentally omit a license, so this is common enough to note. For more info on the issue, feel free to see: http://choosealicense.com/no-license/ http://www.wired.com/2013/07/github-licenses/ https://twitter.com/stephenrwalli/status/247597785069789184 Signed-off-by: David A. Wheeler <dwheeler@xxxxxxxxxxxx> --- builtin/clone.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/builtin/clone.c b/builtin/clone.c index 9572467..9863b04 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -748,6 +748,41 @@ static void dissociate_from_references(void) die_errno(_("cannot unlink temporary alternates file")); } +static int starts_with_ignore_case(const char *str, const char *prefix) +{ + for (; ; str++, prefix++) + if (!*prefix) + return 1; + else if (tolower(*str) != tolower(*prefix)) + return 0; +} + +static int contains_license(void) +{ + DIR *dir = opendir("."); /* Examine current directory for license. */ + struct dirent *e; + struct stat st; + int ret = 0; + + if (!dir) + return 0; + + while ((e = readdir(dir)) != NULL) + if (starts_with_ignore_case(e->d_name, "license") || + starts_with_ignore_case(e->d_name, "copyright")) { + if (stat(e->d_name, &st)) + continue; + if (st.st_size > 1) { + ret = 1; + break; + } + } + + closedir(dir); + return ret; +} + + int cmd_clone(int argc, const char **argv, const char *prefix) { int is_bundle = 0, is_local; @@ -1016,6 +1051,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix) junk_mode = JUNK_LEAVE_REPO; err = checkout(); + if (!option_no_checkout && !contains_license()) + warning(_("Repository has no LICENSE or COPYING file with content.")); + strbuf_release(&reflog_msg); strbuf_release(&branch_top); strbuf_release(&key); -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html