Dear diary, on Sat, Aug 06, 2005 at 09:14:03AM CEST, I got a letter
where Pavel Roskin <[EMAIL PROTECTED]> told me that...
> Hello, Petr!


> Sorry for delay.

no problem, and sorry for another delay on my side too. :-)

> On Sun, 2005-07-10 at 17:46 +0200, Petr Baudis wrote:
> > (v) Semantically, I think it's quite close to cg-reset. What about
> > making it part of cg-reset instead of a separate command? I tend to be
> > careful about command inflation. (That's part of being careful about the
> > usability in general.) That's just an idea and possibly a bad one, what
> > do you think?
> I understand your concern, but cg-reset does other things.  cg-reset
> changes the branch.  cg-clean allows to start the build from scratch
> without changing the branch.
> It's not uncommon for me to revert patches one-by-one looking for the
> patch that breaks something.  I could make minor changes e.g for
> debugging or to fix breakage in certain revisions.  I would revert such
> by cg-clean before going to another revision.  cg-reset would be an
> overkill - it would move me to the latest release.
> I can imagine that cg-reset would call cg-clean (optionally) to allow
> fresh start on the main branch.  The opposite would be wrong.

Yes, that makes sense.

> Here's the simplified cg-clean script.  Note that the "-d" option is not
> working with the current version of git of a bug in git-ls-files.  I can
> work it around by scanning all directories in bash, but I think it's
> easier to fix git (remove "continue" before DT_REG in ls-files.c).

Is that fixed already?

> Processing of .gitignore was taken from cg-status, and I don't really
> understand it.  But I think it's important to keep that code in sync.
> It could later go to cg-Xlib.

It became much simpler a short while later, thankfully. Judging from
your another patch, I suppose you are going to update this script

> Signed-off-by: Pavel Roskin <[EMAIL PROTECTED]>
> #!/usr/bin/env bash
> #
> # Clean unknown files from the working tree.
> # Copyright (c) Pavel Roskin, 2005
> #
> # Cleans file and directories that are not under version control.
> # When run without arguments, files ignored by cg-status and directories
> # are not removed.
> #
> # -------
> # -d::
> #     Also clean directories.

Perhaps add "and their contents" to prevent bad surprises.

> #
> # -x::
> #     Also clean files ignored by cg-status, such as object files.
> USAGE="cg-clean [-d] [-x]"
> . ${COGITO_LIB}cg-Xlib
> cleanexclude=
> cleandir=
> while optparse; do
>       if optparse -d; then
>               cleandir=1
>       elif optparse -x; then
>               cleanexclude=1
>       else
>               optfail
>       fi
> done
> # Good candidate for cg-Xlib
> # Put exclude options for git-ls-files to EXCLUDE
> git-update-cache --refresh > /dev/null
> # Need to use temporary file so that changing IFS doesn't affect $EXCLUDE
> # expansion.
> filelist=$(mktemp -t gitlsfiles.XXXXXX)
> git-ls-files --others $EXCLUDE >"$filelist"
> save_IFS="$IFS"
> IFS=$'\n'
> for file in $(cat "$filelist"); do

Why can't you use git-ls-files | IFS=$'\n' while ?

>       IFS="$save_IFS"
>       if [ -d "$file" ]; then
>               if [ "$cleandir" ]; then
>                       # Try really hard by changing permissions
>                       chmod -R 700 "$file"
>                       rm -rf "$file"
>               fi

An error message would be in order otherwise, I guess.

>               return

I suppose you mean continue? I'm not really sure what does return do
here, if it jumps out of the do block or what, and continue is nicely
explicit. :-)

>       fi
>       rm -f "$file"
> done
> rm -f "$filelist"

                                Petr "Pasky" Baudis
If you want the holes in your knowledge showing up try teaching
someone.  -- Alan Cox
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to