threads / discuss / 1839

Newbie falls at first hurdle

Subject: Newbie falls at first hurdle

## tl;dr

8 messages between Sep 17, 2005 and Sep 18, 2005.

replies: 7people: 3as markdown or json

Alan Chandler· Sep 17, 2005, 12:09 UTC · lore

I have been lurking on this mailing list since the beginning, but have just got to the point where I want to use git to manage something I am doing.

I have already got a working directory (or rather a directory hierarchy) of an application with files (combination of html and java), and I need to start applying some control to it. The Tutorial unfortunately does not cover this case. Nevertheless I have proceeded.

So at the top-level I have done 'git-init-db'
but I now assume I have to add all the files to the cache
So 'git-update-cache --add *' would seem to be the next step.
However this fails with a message 

error: JavaSource: is a directory fatal: Unable to add JavaSource to database; maybe you want to use --add option?

Since I am already using the --add option, I really don't understand what I am doing wrong.

Help please.
-- 
Alan Chandler
http://www.chandlerfamily.org.uk
Junio C Hamano· Sep 17, 2005, 16:13 UTC · re: Alan Chandler · lore

Re: Newbie falls at first hurdle

Alan Chandler <alan@chandlerfamily.org.uk> writes:
Show 7 quoted lines
> So 'git-update-cache --add *' would seem to be the next step.
>
> However this fails with a message 
>
> error: JavaSource: is a directory
> fatal: Unable to add JavaSource to database; maybe you want to use --add 
> option?
Sorry, that is not a very helpful error message.

We do not track 'directories'. Only files and symlinks, which could live within subdirectories, and that's why you got that error message -- you told it to add a directory. You'd need something like this:

    $ find * ! -type d -print0 | xargs -0 git add
Alan Chandler· Sep 17, 2005, 16:30 UTC · re: Junio C Hamano · lore

Re: Newbie falls at first hurdle

On Saturday 17 Sep 2005 17:13, Junio C Hamano wrote:
> Alan Chandler <alan@chandlerfamily.org.uk> writes:
> We do not track 'directories'.  ...
>
>     $ find * ! -type d -print0 | xargs -0 git add
I did actually manage to create content with

find . -wholename './.git' -prune -o -wholename './.deployables' -prune -o \( -type f -print \) | xargs git-update-cache --add

and then commited it (with git commit)

The editor file that came up with this listed all the files it was going to commit INCLUDING some .files from the root directory (I am using eclipse, so I had files like .project and .classpath there). It says in the Documentation that git ignores those - has it done?

I then blew away (ie deleted) a couple of directories in my working tree and loaded them from an earlier backup and git diff HEAD showed the differences of the content of these new directories against the committed ones just fine. I then deleted these directories again and then attempted to check them out from the repository with

git checkout master
None of these directories has been created in my working directory.

Does this mean that I have to manually create the directory structure for the files to be checked into?

-- 
Alan Chandler
http://www.chandlerfamily.org.uk
Junio C Hamano· Sep 17, 2005, 16:50 UTC · re: Alan Chandler · lore

Re: Newbie falls at first hurdle

Alan Chandler <alan@chandlerfamily.org.uk> writes:
> The editor file that came up with this listed all the files it was going to 
> commit INCLUDING some .files from the root directory (I am using eclipse, so 
> I had files like .project and .classpath there).  It says in the 
> Documentation that git ignores those - has it done?

We ignore '.git' but we let you have paths starting with dots these days -- the change happened quite a while ago and if some documentation still says we do not, then you spotted a documentation bug.

Show 6 quoted lines
> I then deleted these directories again and then attempted to check them out 
> from the repository with
>
> git checkout master
>
> None of these directories has been created in my working directory.

After you told git about those files, you removed them from your working tree. "git checkout" tries not to lose your local changes -- which means that what you removed will be left removed (so are what you locally edited).

    $ git checkout -f

would give them back, but you would also lose other local changes if you have some.

Alan Chandler· Sep 17, 2005, 17:01 UTC · re: Junio C Hamano · lore

Re: Newbie falls at first hurdle

On Saturday 17 Sep 2005 17:50, Junio C Hamano wrote:
Show 10 quoted lines
> Alan Chandler <alan@chandlerfamily.org.uk> writes:
> > The editor file that came up with this listed all the files it was going
> > to commit INCLUDING some .files from the root directory (I am using
> > eclipse, so I had files like .project and .classpath there).  It says in
> > the Documentation that git ignores those - has it done?
>
> We ignore '.git' but we let you have paths starting with dots
> these days -- the change happened quite a while ago and if some
> documentation still says we do not, then you spotted a
> documentation bug.

I think that is probably my problem. I deleted all of /usr/local/bin (which had an earlier version of git in it) and then tried to re-install git 99.6. When I got a permissions error I gave up and installed into ~/bin.

But of course - that probably means that the man pages are old ones from when I last installed git (very early in the development cycle).

-- 
Alan Chandler
http://www.chandlerfamily.org.uk
Petr Baudis· Sep 18, 2005, 14:59 UTC · re: Alan Chandler · lore

Re: Newbie falls at first hurdle

Dear diary, on Sat, Sep 17, 2005 at 02:09:46PM CEST, I got a letter where Alan Chandler <alan@chandlerfamily.org.uk> told me that...

Show 22 quoted lines
> I have been lurking on this mailing list since the beginning, but have just 
> got to the point where I want to use git to manage something I am doing.
> 
> I have already got a working directory (or rather a directory hierarchy) of an 
> application with files (combination of html and java), and I need to start 
> applying some control to it.  The Tutorial unfortunately does not cover this 
> case.  Nevertheless I have proceeded.
> 
> So at the top-level I have done 'git-init-db'
> 
> but I now assume I have to add all the files to the cache
> 
> So 'git-update-cache --add *' would seem to be the next step.
> 
> However this fails with a message 
> 
> error: JavaSource: is a directory
> fatal: Unable to add JavaSource to database; maybe you want to use --add 
> option?
> 
> Since I am already using the --add option, I really don't understand what I am 
> doing wrong.

Two reports about this error message in one day, and I've seen more in the past. Heh. ;-) I'd submit a patch, but I'm still staying at the last git release because of the command renames.

BTW, cg-add should be now (not in the last release yet, though) totally directory-friendly.

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
If you want the holes in your knowledge showing up try teaching
someone.  -- Alan Cox
Junio C Hamano· Sep 18, 2005, 17:35 UTC · re: Petr Baudis · lore

Re: Newbie falls at first hurdle

Petr Baudis <pasky@suse.cz> writes:
> Two reports about this error message in one day, and I've seen more in
> the past. Heh. ;-) I'd submit a patch, but I'm still staying at the last
> git release because of the command renames.

That should not be a reason to stay at the last release; the old command names should be supported as well in the current "master" branch -- unless something is broken (missing backward compatible old-name symlinks, for example), which I hope is not the case.

Petr Baudis· Sep 18, 2005, 19:09 UTC · re: Junio C Hamano · lore

[PATCH] Improve git-update-index error reporting

Dear diary, on Sun, Sep 18, 2005 at 07:35:00PM CEST, I got a letter where Junio C Hamano <junkio@cox.net> told me that...

Show 11 quoted lines
> Petr Baudis <pasky@suse.cz> writes:
> 
> > Two reports about this error message in one day, and I've seen more in
> > the past. Heh. ;-) I'd submit a patch, but I'm still staying at the last
> > git release because of the command renames.
> 
> That should not be a reason to stay at the last release; the old
> command names should be supported as well in the current
> "master" branch -- unless something is broken (missing backward
> compatible old-name symlinks, for example), which I hope is not
> the case.

You are obviously right. I don't make install, but running ./cmd-rename.sh manually seemed to work fine.

--

This makes git-update-index error reporting much less confusing. The user will know what went wrong with better precision, and will be given a hopefully less confusing advice.

Signed-off-by: Petr Baudis <pasky@suse.cz>

--- commit c758513532d4077630977fd0ee86ad1ba37c250a tree db9476c44cb74ea98ebec31cf7431cd012d5db94 parent 7f4b3d9fef3f1855005e243de43776d8015ca737 author Petr Baudis <pasky@suse.cz> Sun, 18 Sep 2005 21:08:35 +0200 committer Petr Baudis <xpasky@machine.(none)> Sun, 18 Sep 2005 21:08:35 +0200

 update-index.c |   36 +++++++++++++++++++++++++-----------
 1 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/update-index.c b/update-index.c
--- a/update-index.c
+++ b/update-index.c
@@ -50,11 +50,20 @@ static int add_file_to_cache(char *path)
 		 * case just fine without --force-remove.
 		 */
 		if (status == 0 || (errno == ENOENT || errno == ENOTDIR)) {
-			if (allow_remove)
-				return remove_file_from_cache(path);
+			if (allow_remove) {
+				if (remove_file_from_cache(path))
+					return error("%s: cannot remove from the index",
+					             path);
+				else
+					return 0;
+			} else if (status < 0) {
+				return error("%s: does not exist and --remove not passed",
+				             path);
+			}
 		}
 		if (0 == status)
-			return error("%s: is a directory", path);
+			return error("%s: is a directory - add files inside instead",
+			             path);
 		else
 			return error("lstat(\"%s\"): %s", path,
 				     strerror(errno));
@@ -71,15 +80,17 @@ static int add_file_to_cache(char *path)
 	case S_IFREG:
 		fd = open(path, O_RDONLY);
 		if (fd < 0)
-			return -1;
+			return error("open(\"%s\"): %s", path, strerror(errno));
 		if (index_fd(ce->sha1, fd, &st, !info_only, NULL) < 0)
-			return -1;
+			return error("%s: failed to insert into database", path);
 		break;
 	case S_IFLNK:
 		target = xmalloc(st.st_size+1);
 		if (readlink(path, target, st.st_size+1) != st.st_size) {
+			char *errstr = strerror(errno);
 			free(target);
-			return -1;
+			return error("readlink(\"%s\"): %s", path,
+			             errstr);
 		}
 		if (info_only) {
 			unsigned char hdr[50];
@@ -87,15 +98,18 @@ static int add_file_to_cache(char *path)
 			write_sha1_file_prepare(target, st.st_size, "blob",
 						ce->sha1, hdr, &hdrlen);
 		} else if (write_sha1_file(target, st.st_size, "blob", ce->sha1))
-			return -1;
+			return error("%s: failed to insert into database", path);
 		free(target);
 		break;
 	default:
-		return -1;
+		return error("%s: unsupported file type", path);
 	}
 	option = allow_add ? ADD_CACHE_OK_TO_ADD : 0;
 	option |= allow_replace ? ADD_CACHE_OK_TO_REPLACE : 0;
-	return add_cache_entry(ce, option);
+	if (add_cache_entry(ce, option))
+		return error("%s: cannot add to the index - missing --add option?",
+			     path);
+	return 0;
 }
 
 static int compare_data(struct cache_entry *ce, struct stat *st)
@@ -393,11 +407,11 @@ int main(int argc, char **argv)
 		}
 		if (force_remove) {
 			if (remove_file_from_cache(path))
-				die("git-update-index: --force-remove cannot remove %s", path);
+				die("git-update-index: unable to remove %s", path);
 			continue;
 		}
 		if (add_file_to_cache(path))
-			die("Unable to add %s to database; maybe you want to use --add option?", path);
+			die("Unable to process file %s", path);
 	}
 	if (write_cache(newfd, active_cache, active_nr) ||
 	    commit_index_file(&cache_file))
-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
If you want the holes in your knowledge showing up try teaching
someone.  -- Alan Cox

← back to recent threads