# Newbie falls at first hurdle

8 messages from 2005-09-17 to 2005-09-18. Participants: Alan Chandler, Junio C Hamano, Petr Baudis.
Thread: https://gitlist.dev/t/1839

## Alan Chandler, 2005-09-17 12:09

Subject: Newbie falls at first hurdle
Message-ID: <200509171309.46893.alan@chandlerfamily.org.uk>
URL: https://gitlist.dev/e/200509171309.46893.alan%40chandlerfamily.org.uk

```
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, 2005-09-17 16:13

Subject: Re: Newbie falls at first hurdle
Message-ID: <7vek7nbrk7.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vek7nbrk7.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <200509171309.46893.alan@chandlerfamily.org.uk>

```
Alan Chandler <alan@chandlerfamily.org.uk> writes:

> 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, 2005-09-17 16:30

Subject: Re: Newbie falls at first hurdle
Message-ID: <200509171730.19055.alan@chandlerfamily.org.uk>
URL: https://gitlist.dev/e/200509171730.19055.alan%40chandlerfamily.org.uk
In-Reply-To: <7vek7nbrk7.fsf@assigned-by-dhcp.cox.net>

```
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, 2005-09-17 16:50

Subject: Re: Newbie falls at first hurdle
Message-ID: <7v1x3n8wps.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7v1x3n8wps.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <200509171730.19055.alan@chandlerfamily.org.uk>

```
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 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, 2005-09-17 17:01

Subject: Re: Newbie falls at first hurdle
Message-ID: <200509171801.35612.alan@chandlerfamily.org.uk>
URL: https://gitlist.dev/e/200509171801.35612.alan%40chandlerfamily.org.uk
In-Reply-To: <7v1x3n8wps.fsf@assigned-by-dhcp.cox.net>

```
On Saturday 17 Sep 2005 17:50, Junio C Hamano wrote:
> 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, 2005-09-18 14:59

Subject: Re: Newbie falls at first hurdle
Message-ID: <20050918145958.GB22391@pasky.or.cz>
URL: https://gitlist.dev/e/20050918145958.GB22391%40pasky.or.cz
In-Reply-To: <200509171309.46893.alan@chandlerfamily.org.uk>

```
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...
> 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, 2005-09-18 17:35

Subject: Re: Newbie falls at first hurdle
Message-ID: <7virwy46uz.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7virwy46uz.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20050918145958.GB22391@pasky.or.cz>

```
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, 2005-09-18 19:09

Subject: [PATCH] Improve git-update-index error reporting
Message-ID: <20050918190922.GC22391@pasky.or.cz>
URL: https://gitlist.dev/e/20050918190922.GC22391%40pasky.or.cz
In-Reply-To: <7virwy46uz.fsf@assigned-by-dhcp.cox.net>

```
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...
> 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

```
