# # patch "git.cc" # from [90ef449fb2794c48374fc0d4044f8063e10595ae] # to [50c5d10e1b35b85ed19c15bd5f2e3bc3a733d116] # # patch "tests/t_gitimport2.at" # from [a30ca6ab36565693c194526761220ad9905c87a6] # to [5351d6293994c30ffed4a20f275017abc598db59] # ======================================================================== --- git.cc 90ef449fb2794c48374fc0d4044f8063e10595ae +++ git.cc 50c5d10e1b35b85ed19c15bd5f2e3bc3a733d116 @@ -283,15 +283,17 @@ import_git_tree(git, app, gitoid, manifest, fullname + '/', attrs); else { + file_path fpath = file_path_internal(fullname); + if (mode & 0100) // executable { L(F("marking '%s' as executable") % fullname); - attrs[fullname]["execute"] = "true"; + attrs[fpath]["execute"] = "true"; } file_id fid = import_git_blob(git, app, gitoid); L(F("entry monoid [%s]") % fid.inner()); - manifest.insert(manifest_entry(file_path(fullname), fid)); + manifest.insert(manifest_entry(fpath, fid)); } } @@ -733,8 +735,19 @@ data refdata; read_data(path, refdata); - // FIXME: Incorrect - there can be tags like "net/v1.0" and such. - std::string tagname = fs::path(path.as_external(), fs::native).leaf(); + + // We can't just .leaf() - there can be tags like "net/v1.0" and such. + // XXX: My head hurts from all those temporary variables. + system_path sptagsdir = git.db.path / "refs/tags"; + fs::path tagsdir(sptagsdir.as_external(), fs::native); + fs::path tagpath(path.as_external(), fs::native); + std::string strtagpath = tagpath.string(), strtagsdir = tagsdir.string(); + + N(strtagpath.substr(0, strtagsdir.length()) == strtagsdir, + F("tags directory name screwed up - %s does not being with %s") + % strtagpath % strtagsdir); + std::string tagname(strtagpath.substr(strtagsdir.length() + 1)); // + '/' + import_unresolved_git_tag(git, app, tagname, refdata().substr(0, 40)); } virtual ~tags_tree_walker() {} @@ -759,16 +772,12 @@ require_password(key, app); } - N(fs::exists(gitrepo), - F("path %s does not exist") % gitrepo.string()); - N(fs::is_directory(gitrepo), - F("path %s is not a directory") % gitrepo.string()); require_path_is_directory(gitrepo, F("repo %s does not exist") % gitrepo, F("repo %s is not a directory") % gitrepo); - + { - char * env_entry = stdrup((string("GIT_DIR=") + gitrepo.as_external()).c_str()); + char * env_entry = strdup((string("GIT_DIR=") + gitrepo.as_external()).c_str()); putenv(env_entry); } ======================================================================== --- tests/t_gitimport2.at a30ca6ab36565693c194526761220ad9905c87a6 +++ tests/t_gitimport2.at 5351d6293994c30ffed4a20f275017abc598db59 @@ -16,8 +16,8 @@ AT_DATA(importme.3, [version 3 of test file ]) -AT_DATA(taglist, [commit1 748f08f9c8d2588213205431273da20c1042f07e address@hidden -commit2 d049f5c92cab90d58306449aff93b6b6cf73c728 address@hidden +AT_DATA(taglist, [commit/c2 d049f5c92cab90d58306449aff93b6b6cf73c728 address@hidden +commit1 748f08f9c8d2588213205431273da20c1042f07e address@hidden ]) TSHA0=`SHA1(importme.0)` @@ -45,7 +45,8 @@ AT_CHECK(cp importme.2 importme) AT_CHECK(git-update-cache importme, [], [ignore], [ignore]) AT_CHECK(echo 'commit 2' | git-commit-tree $(git-write-tree) -p $(cat .git/HEAD) >.git/HEAD, [], [ignore], [ignore]) -AT_CHECK(cat .git/HEAD >.git/refs/tags/commit2) +AT_CHECK(mkdir .git/refs/tags/commit) +AT_CHECK(cat .git/HEAD >.git/refs/tags/commit/c2) AT_CHECK(cp importme.3 importme) AT_CHECK(git-update-cache importme, [], [ignore], [ignore]) AT_CHECK(echo 'commit 3' | git-commit-tree $(git-write-tree) -p $(cat .git/HEAD) >.git/HEAD, [], [ignore], [ignore])