git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Git Cygwin - unable to create any repository - help!

From
Alex Riesen <raa.lkml@gmail.com>
Date
Jan 16, 2008, 23:45 UTC
Message-ID
<20080116234527.GA3499@steel.home>
In-Reply-To
<a5eb9c330801161344i1da447c7sb447bf6274d408e8@mail.gmail.com>
Paul Umbers, Wed, Jan 16, 2008 22:44:10 +0100:
> Here's the log from the latest strace.

Something is fishy here (aside from the horrible selection of information in the trace output):

   56 1151793 [main] git 3244 symlink_info::check: 0 = symlink.check (c:\workspace\git\git-1.5.3\.git\objects\2e, 0x22BBE0) (0x2A)
   58 1151851 [main] git 3244 path_conv::check: this->path(c:\workspace\git\git-1.5.3\.git\objects\2e\d63d326ffdb2fd4b703780f4d61f1893cac63b), has_acls(1)
   65 1151916 [main] git 3244 fhandler_base::open: (c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L, 0x110000)
  206 1152122 [main] git 3244 fhandler_base::set_flags: flags 0x110000, supplied_bin 0x10000
   76 1152198 [main] git 3244 fhandler_base::set_flags: O_TEXT/O_BINARY set in flags 0x10000
  308 1152506 [main] git 3244 fhandler_base::set_flags: filemode set to binary
  146 1152652 [main] git 3244 fhandler_base::open: 0 = NtCreateFile (0x6D0, 20100, c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L, io, NULL, 0, 7, 1, 4400, NULL, 0)
   74 1152726 [main] git 3244 fhandler_base::open: 1 = fhandler_base::open (c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L, 0x110000)
  105 1152831 [main] git 3244 fhandler_base::open_fs: 1 = fhandler_disk_file::open (c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L, 0x10000)
 5915 1158746 [main] git 3244 fhandler_disk_file::link: CreateHardLinkA failed
   94 1158840 [main] git 3244 seterrno_from_win_error: /ext/build/netrel/src/cygwin-1.5.25-7/winsup/cygwin/fhandler_disk_file.cc:893 windows error 183
   72 1158912 [main] git 3244 geterrno_from_win_error: windows error 183 == errno 17
   64 1158976 [main] git 3244 __set_errno: void seterrno_from_win_error(const char*, int, DWORD):310 val 17
   65 1159041 [main] git 3244 fhandler_base::close: closing '/cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L' handle 0x6D0
  124 1159165 [main] git 3244 link: -1 = link (/cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L, /cygdrive/c/workspace/git/git-1.5.3/.git/objects/2e/d63d326ffdb2fd4b703780f4d61f1893cac63b)
   87 1159252 [main] git 3244 normalize_posix_path: src /cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L
   94 1159346 [main] git 3244 normalize_posix_path: /cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L = normalize_posix_path (/cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L)
   65 1159411 [main] git 3244 mount_info::conv_to_win32_path: conv_to_win32_path (/cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L)
  104 1159515 [main] git 3244 mount_info::cygdrive_win32_path: src '/cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L', dst 'c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L'
   73 1159588 [main] git 3244 set_flags: flags: binary (0x2)
   62 1159650 [main] git 3244 mount_info::conv_to_win32_path: src_path /cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L, dst c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L, flags 0x2A, rc 0
  130 1159780 [main] git 3244 symlink_info::check: not a symlink
   66 1159846 [main] git 3244 symlink_info::check: 0 = symlink.check (c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L, 0x22C110) (0x2A)
   67 1159913 [main] git 3244 path_conv::check: this->path(c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L), has_acls(1)
   64 1159977 [main] git 3244 unlink: _unlink (c:\workspace\git\git-1.5.3\.git\objects\tmp_obj_rOxD3L)
  763 1160740 [main] git 3244 unlink: 1 = CloseHandle (0x6D0)
  144 1160884 [main] git 3244 unlink: CreateFile (FILE_FLAG_DELETE_ON_CLOSE) succeeded
   66 1160950 [main] git 3244 unlink: 0 = unlink (/cygdrive/c/workspace/git/git-1.5.3/.git/objects/tmp_obj_rOxD3L)

Could you locate move_temp_to_file and make it unconditionally rename the tempfile into target sha1 file? It should become something like that:

int move_temp_to_file(const char *tmpfile, const char *filename)
{
	int ret = link_temp_to_file(tmpfile, filename);
	/*
	 * Coda hack - coda doesn't like cross-directory links,
	 * so we fall back to a rename, which will mean that it
	 * won't be able to check collisions, but that's not a
	 * big deal.
	 *
	 * The same holds for FAT formatted media.
	 *
	 * When this succeeds, we just return 0. We have nothing
	 * left to unlink.
	 */
	if (!rename(tmpfile, filename))
		return 0;
	ret = errno;
	unlink(tmpfile);
	if (ret) {
		if (ret != EEXIST) {
			return error("unable to write sha1 filename %s: %s\n", filename, strerror(ret));
		}
		/* FIXME!!! Collision check here ? */
		return error("failed to write sha1 filename %s: %s\n", filename, strerror(ret));
	}
	return 0;
}

Does someone know, why this function seem to return 0 (success) on something which looks like an SHA1 collision? And destroy the tempfile, even though it is not moved anywhere.

Previous: Paul UmbersNext: Paul Umbers
Message 25 of 39 in “Git Cygwin - unable to create any repository - help!”
  1. Paul UmbersJan 14, 2008
  2. Alex RiesenJan 14, 2008
  3. Paul UmbersJan 14, 2008
  4. Alex RiesenJan 15, 2008
  5. Paul UmbersJan 15, 2008
  6. Alex RiesenJan 15, 2008
  7. Paul UmbersJan 15, 2008
  8. Alex RiesenJan 15, 2008
  9. Paul UmbersJan 15, 2008
  10. Alex RiesenJan 15, 2008
  11. Paul UmbersJan 15, 2008
  12. Alex RiesenJan 15, 2008
  13. Robin RosenbergJan 15, 2008
  14. Alex RiesenJan 16, 2008
  15. Paul UmbersJan 16, 2008
  16. Junio C HamanoJan 16, 2008
  17. Paul UmbersJan 16, 2008
  18. Alex RiesenJan 16, 2008
  19. Paul UmbersJan 16, 2008
  20. Alex RiesenJan 16, 2008
  21. Paul UmbersJan 16, 2008
  22. Alex RiesenJan 16, 2008
  23. Alex RiesenJan 16, 2008
  24. Paul UmbersJan 16, 2008
  25. Alex RiesenJan 16, 2008
  26. Paul UmbersJan 17, 2008
  27. Linus TorvaldsJan 17, 2008
  28. Johannes SchindelinJan 17, 2008
  29. Paul UmbersJan 17, 2008
  30. Linus TorvaldsJan 17, 2008
  31. Pascal ObryJan 17, 2008
  32. Johannes SchindelinJan 17, 2008
  33. Pascal ObryJan 17, 2008
  34. Paul UmbersJan 17, 2008
  35. Alex RiesenJan 17, 2008
  36. Nicholas WourmsJan 17, 2008
  37. Alex RiesenJan 17, 2008
  38. Paul UmbersJan 16, 2008
  39. Pascal ObryJan 15, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.