Re: git-push error: Cannot write keep file

Subsystems: the rest

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: git-push error: Cannot write keep file

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:46:16

Rafael Darder Calvo [off-list ref] writes:
Hello,
	I am having the following error when I try to git push.


rdarder@shiny:~/Sources/promotoras$ git push origin ranto:ranto
Counting objects: 256, done.
Compressing objects: 100% (199/199), done.
Writing objects: 100% (213/213), 216.94 KiB, done.
Total 213 (delta 60), reused 1 (delta 0)

fatal: cannot write keep file

error: unpack failed: index-pack abnormal exit
To ssh://fherrero@10.7.1.20:2222/var/www/promotoras.git
 ! [remote rejected] ranto -> ranto (n/a (unpacker error))
error: failed to push some refs to
'ssh://fherrero@10.7.1.20:2222/var/www/promotoras.git'


I couldn't find any significant description on the error "cannot write
keep file". git-fsck passes without errors in both repositories, and I
find no permission problems. Can anyone give me some directions on how
to diagnose this?
If you have access to the receiving side of the repository and the machine
that hosts it, the debug patch attached may help.

One possibility is the receiving repository was initialized long time ago
with an ancient git (ealier than f49fb35 (git-init-db: create "pack"
subdirectory under objects, 2005-06-27), and never had a packfile in it
since then.  We started creating '.git/objects/pack/' subdirectory in
git-init only after that commit.  It was Ok for a long time because we
lazily create "pack" subdirectory as needed, but a recent change 8b4eb6b
(Do not perform cross-directory renames when creating packs, 2008-09-22)
carelessly assumed that .git/objects/pack/ directory would always exist
and tries to create files in there without making sure the leading
directories exist.  See $gmane/110621

    Subject: [PATCH] Make sure objects/pack exists before creating a new pack
    To: git@vger.kernel.org
    Date: Wed, 18 Feb 2009 20:48:07 -0800
    Message-ID: [off-list ref]

for details.

And the debug patch...

 index-pack.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/index-pack.c b/index-pack.c
index f7a3807..acdc85f 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -802,14 +802,18 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
 		keep_fd = open(keep_name, O_RDWR|O_CREAT|O_EXCL, 0600);
 		if (keep_fd < 0) {
 			if (errno != EEXIST)
-				die("cannot write keep file");
+				die("cannot write keep file '%s' (%s)",
+				    keep_name,
+				    strerror(errno));
 		} else {
 			if (keep_msg_len > 0) {
 				write_or_die(keep_fd, keep_msg, keep_msg_len);
 				write_or_die(keep_fd, "\n", 1);
 			}
 			if (close(keep_fd) != 0)
-				die("cannot write keep file");
+				die("cannot close the written keep file '%s' (%s)",
+				    keep_name,
+				    strerror(errno));
 			report = "keep";
 		}
 	}

Re: git-push error: Cannot write keep file

From: Rafael Darder Calvo <hidden>
Date: 2016-06-15 22:46:16

Junio C Hamano wrote:
Rafael Darder Calvo [off-list ref] writes:
quoted
Hello,
	I am having the following error when I try to git push.


rdarder@shiny:~/Sources/promotoras$ git push origin ranto:ranto
Counting objects: 256, done.
Compressing objects: 100% (199/199), done.
Writing objects: 100% (213/213), 216.94 KiB, done.
Total 213 (delta 60), reused 1 (delta 0)

fatal: cannot write keep file

error: unpack failed: index-pack abnormal exit
To ssh://fherrero@10.7.1.20:2222/var/www/promotoras.git
 ! [remote rejected] ranto -> ranto (n/a (unpacker error))
error: failed to push some refs to
'ssh://fherrero@10.7.1.20:2222/var/www/promotoras.git'


I couldn't find any significant description on the error "cannot write
keep file". git-fsck passes without errors in both repositories, and I
find no permission problems. Can anyone give me some directions on how
to diagnose this?
If you have access to the receiving side of the repository and the machine
that hosts it, the debug patch attached may help.

One possibility is the receiving repository was initialized long time ago
with an ancient git (ealier than f49fb35 (git-init-db: create "pack"
subdirectory under objects, 2005-06-27), and never had a packfile in it
since then.  We started creating '.git/objects/pack/' subdirectory in
git-init only after that commit.  It was Ok for a long time because we
lazily create "pack" subdirectory as needed, but a recent change 8b4eb6b
(Do not perform cross-directory renames when creating packs, 2008-09-22)
carelessly assumed that .git/objects/pack/ directory would always exist
and tries to create files in there without making sure the leading
directories exist.  See $gmane/110621
The receiving repository was indeed lacking a .git/objects/pack/ 
directory, but it was created with a recent (1.5.4.3) git version. I 
suspect the repo owner has deleted de dir by mistake or something.

Thank you very much for your help.
quoted hunk
    Subject: [PATCH] Make sure objects/pack exists before creating a new pack
    To: git@vger.kernel.org
    Date: Wed, 18 Feb 2009 20:48:07 -0800
    Message-ID: [off-list ref]

for details.

And the debug patch...

 index-pack.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/index-pack.c b/index-pack.c
index f7a3807..acdc85f 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -802,14 +802,18 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
 		keep_fd = open(keep_name, O_RDWR|O_CREAT|O_EXCL, 0600);
 		if (keep_fd < 0) {
 			if (errno != EEXIST)
-				die("cannot write keep file");
+				die("cannot write keep file '%s' (%s)",
+				    keep_name,
+				    strerror(errno));
 		} else {
 			if (keep_msg_len > 0) {
 				write_or_die(keep_fd, keep_msg, keep_msg_len);
 				write_or_die(keep_fd, "\n", 1);
 			}
 			if (close(keep_fd) != 0)
-				die("cannot write keep file");
+				die("cannot close the written keep file '%s' (%s)",
+				    keep_name,
+				    strerror(errno));
 			report = "keep";
 		}
 	}




Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help