* [PATCH 3/7] cleanups: Remove unused vars from combine-diff.c
From: Serge E. Hallyn @ 2006-04-17 15:14 UTC (permalink / raw)
To: git
In-Reply-To: <20060417145148.2F3CB19C90D@sergelap.hallyn.com>
Mod_type in particular sure looks like it wants to be used, but isn't.
Signed-off-by: Serge E. Hallyn <serue@us.ibm.com>
---
combine-diff.c | 12 ++----------
1 files changed, 2 insertions(+), 10 deletions(-)
5a7c4023402dd2420a4596cdd92a1a46fd3e5c14
diff --git a/combine-diff.c b/combine-diff.c
index 9bd27f8..9445e86 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -589,7 +589,7 @@ static int show_patch_diff(struct combin
struct diff_options *opt)
{
unsigned long result_size, cnt, lno;
- char *result, *cp, *ep;
+ char *result, *cp;
struct sline *sline; /* survived lines */
int mode_differs = 0;
int i, show_hunks, shown_header = 0;
@@ -641,7 +641,6 @@ static int show_patch_diff(struct combin
cnt++; /* incomplete line */
sline = xcalloc(cnt+2, sizeof(*sline));
- ep = result;
sline[0].bol = result;
for (lno = 0; lno <= cnt + 1; lno++) {
sline[lno].lost_tail = &sline[lno].lost_head;
@@ -752,7 +751,7 @@ static int show_patch_diff(struct combin
static void show_raw_diff(struct combine_diff_path *p, int num_parent, const char *header, struct diff_options *opt)
{
- int i, offset, mod_type = 'A';
+ int i, offset;
const char *prefix;
int line_termination, inter_name_termination;
@@ -764,13 +763,6 @@ static void show_raw_diff(struct combine
if (header)
printf("%s%c", header, line_termination);
- for (i = 0; i < num_parent; i++) {
- if (p->parent[i].mode)
- mod_type = 'M';
- }
- if (!p->mode)
- mod_type = 'D';
-
if (opt->output_format == DIFF_FORMAT_RAW) {
offset = strlen(COLONS) - num_parent;
if (offset < 0)
--
1.2.5
^ permalink raw reply related
* [PATCH 4/7] cleanups: Remove impossible case in quote.c
From: Serge E. Hallyn @ 2006-04-17 15:14 UTC (permalink / raw)
To: git
In-Reply-To: <20060417145148.2F3CB19C90D@sergelap.hallyn.com>
The switch is inside an if statement which is false if
the character is ' '. Either the if should be <=' '
instead of <' ', or the case should be removed as it could
be misleading.
Signed-off-by: Serge E. Hallyn <serue@us.ibm.com>
---
quote.c | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
86bdfea7f2e88ed01869f370574420a6de3359d7
diff --git a/quote.c b/quote.c
index 7218a70..06792d4 100644
--- a/quote.c
+++ b/quote.c
@@ -144,8 +144,6 @@ static int quote_c_style_counted(const c
case '\\': /* fallthru */
case '"': EMITQ(); break;
- case ' ':
- break;
default:
/* octal */
EMITQ();
--
1.2.5
^ permalink raw reply related
* Re: Fixes for option parsing
From: Linus Torvalds @ 2006-04-17 14:51 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7vu08soou3.fsf@assigned-by-dhcp.cox.net>
On Sun, 16 Apr 2006, Junio C Hamano wrote:
>
> I am not sure if that belongs to diffstat flush. I was instead
> planning to move it to diff-flush code
Well, that's broken right now with the stat part, for some reason.
> and show it only when we actually show any diffs. IOW, I think we would
> want it even when we are doing "--pretty -p", not "--pretty
> --patch-with-stat".
I'd personally prefer to see it only in front of diffstat, and leave the
patches the way they have been before. For patches, I find the indentation
of the commit message to be visually (a) much more pleasing and (b) more
pronounced than a "---" anyway.
Perhaps configurable? git-format-patch doesn't want the indentation (and
thus "---" makes sense for both patches and diffstat), while "git log"
definitely does, because it's much more visually clear _and_ it makes the
header/comment structure totally unambiguous.
Linus
^ permalink raw reply
* [PATCH] Suppress use of unsafe idiomatic use of && in cg-Xlib
From: Yann Dirson @ 2006-04-17 14:49 UTC (permalink / raw)
To: Petr Baudis; +Cc: git
This is a necessary step to make any cogito script "set -e"-safe.
Also fixes similar issues in cg-admin-rewritehist and turn "set -e" on
there.
Signed-off-by: Yann Dirson <ydirson@altern.org>
---
cg-Xlib | 82 ++++++++++++++++++++++++++------------------------
cg-admin-rewritehist | 8 +++--
2 files changed, 48 insertions(+), 42 deletions(-)
diff --git a/cg-Xlib b/cg-Xlib
index e594986..83d4400 100755
--- a/cg-Xlib
+++ b/cg-Xlib
@@ -26,7 +26,7 @@ warn()
fi
echo "Warning: $@" >&2
- [ "$beep" ] && echo -ne "\a" >&2
+ [ -z "$beep" ] || echo -ne "\a" >&2
}
die()
@@ -177,7 +177,7 @@ showdate()
{
local secs=$1 tzhours=${2:0:3} tzmins=${2:0:1}${2:3} format="$3"
# bash doesn't like leading zeros
- [ "${tzhours:1:1}" = 0 ] && tzhours=${2:0:1}${2:2:1}
+ [ "${tzhours:1:1}" != 0 ] || tzhours=${2:0:1}${2:2:1}
secs=$(($secs + $tzhours * 3600 + $tzmins * 60))
[ "$format" ] || format="+%a, %d %b %Y %H:%M:%S $2"
if [ "$has_gnudate" ]; then
@@ -213,7 +213,7 @@ colorify_diffcolors="$colorify_diffcolor
colorify_setup()
{
local C="$1"
- [ -n "$CG_COLORS" ] && C="$C:$CG_COLORS"
+ [ -z "$CG_COLORS" ] || C="$C:$CG_COLORS"
C=${C//=/=\'$'\e'[}
C=col${C//:/m\'; col}m\'
@@ -253,7 +253,7 @@ column_width()
done | sort -nr | head -n 1 |
(
read maxlen;
- [ ${maxlen:-0} -gt $maxwidth ] && maxlen=$maxwidth;
+ [ ${maxlen:-0} -le $maxwidth ] || maxlen=$maxwidth;
echo ${maxlen:-0}
)
}
@@ -275,7 +275,7 @@ columns_print()
else
fmt="$fmt%-${width}s"
fi
- [ "$tab" ] && fmt="$fmt\t";
+ [ -z "$tab" ] || fmt="$fmt\t";
done
printf "$fmt\n" "${cols[@]}"
}
@@ -313,7 +313,7 @@ pick_id()
'
LANG=C LC_ALL=C sed -ne "$pick_id_script"
# Ensure non-empty id name.
- echo "[ -z \"\$GIT_${uid}_NAME\" ] && export GIT_${uid}_NAME=\"\${GIT_${uid}_EMAIL%%@*}\""
+ echo "[ -n \"\$GIT_${uid}_NAME\" ] || export GIT_${uid}_NAME=\"\${GIT_${uid}_EMAIL%%@*}\""
}
pick_author()
@@ -347,16 +347,16 @@ while IFS= read -r inp; do
done
path[${#path[@]}]="$inp"
for (( i=0; $i < ${#path[@]}; i++ )); do
- [ "${path[$i]}" = "." ] && continue
+ [ "${path[$i]}" != "." ] || continue
if [ "${path[$i]}" = ".." ]; then
- [ "${#path2[@]}" -gt 0 ] && unset path2[$((${#path2[@]} - 1))]
+ [ "${#path2[@]}" -le 0 ] || unset path2[$((${#path2[@]} - 1))]
continue
fi
path2[${#path2[@]}]="${path[$i]}"
done
for (( i=0; $i < ${#path2[@]}; i++ )); do
echo -n "${path2[$i]}"
- [ $i -lt $((${#path2[@]} - 1)) ] && echo -n /
+ [ $i -ge $((${#path2[@]} - 1)) ] || echo -n /
done
echo
done
@@ -392,7 +392,7 @@ # only the dirname/ will be
# EXTRAEXCLUDE: extra exclude pattern
list_untracked_files()
{
- [ "$_git_no_wc" ] && die "INTERNAL ERROR: list_untracked_files() outside a working copy"
+ [ -z "$_git_no_wc" ] || die "INTERNAL ERROR: list_untracked_files() outside a working copy"
excludeflag="$1"; shift
squashflag="$1"; shift
EXCLUDE=()
@@ -435,7 +435,7 @@ list_untracked_files()
fi
fi
local listdirs=
- [ "$squashflag" = "squashdirs" ] && listdirs=--directory
+ [ "$squashflag" != "squashdirs" ] || listdirs=--directory
git-ls-files -z --others $listdirs "${EXCLUDE[@]}"
}
@@ -504,8 +504,8 @@ editor()
actionkey="$1"; shift
${EDITOR:-vi} "$LOGMSG2"
- [ "$force" ] && return 0
- [ "$LOGMSG2" -nt "$LOGMSG" ] && return 0
+ [ -z "$force" ] || return 0
+ [ "$LOGMSG" -nt "$LOGMSG2" ] || return 0
echo "Log message unchanged or not specified" >&2
while true; do
@@ -530,7 +530,7 @@ # the working copy (if ROLLBACK_BOOL) an
# Returns false in case of local modifications (but only if ROLLBACK_ROLL).
tree_timewarp()
{
- [ "$_git_no_wc" ] && die "INTERNAL ERROR: tree_timewarp() outside a working copy"
+ [ -z "$_git_no_wc" ] || die "INTERNAL ERROR: tree_timewarp() outside a working copy"
local no_head_update=
if [ "$1" = "--no-head-update" ]; then
no_head_update=1
@@ -542,14 +542,14 @@ tree_timewarp()
local branch="$1"; shift
local localmods=0
- [ -s "$_git/merging" ] && die "merge in progress - cancel it by cg-reset first"
+ [ ! -s "$_git/merging" ] || die "merge in progress - cancel it by cg-reset first"
if [ -n "$rollback" ]; then
local patchfile="$(mktemp -t gituncommit.XXXXXX)"
cg-diff -r "$base" >"$patchfile"
- [ -s "$patchfile" ] &&
+ [ ! -s "$patchfile" ] ||
warn "uncommitted local changes, trying to bring them $dirstr"
- [ -s "$patchfile" ] && localmods=1
+ [ ! -s "$patchfile" ] || localmods=1
git-read-tree -m "$branch" || die "$branch: bad commit"
[ "$no_head_update" ] || git-update-ref HEAD "$branch" || :
@@ -581,9 +581,9 @@ conservative_merge_base()
_cg_base_conservative=
for (( safecounter=0; $safecounter < 1000; safecounter++ )) ; do
baselist=($(git-merge-base --all "${baselist[@]}")) || return 1
- [ "${#baselist[@]}" -le "1" ] && break
+ [ "${#baselist[@]}" -gt "1" ] || break
done
- [ $safecounter -gt 0 ] && _cg_base_conservative=$safecounter
+ [ $safecounter -le 0 ] || _cg_base_conservative=$safecounter
_cg_baselist=("${baselist[@]}")
}
@@ -595,7 +595,7 @@ # Never use it. If you do, accompany it
# it safe to use it.
update_index()
{
- [ "$_git_no_wc" ] && die "INTERNAL ERROR: update_index() outside a working copy"
+ [ -z "$_git_no_wc" ] || die "INTERNAL ERROR: update_index() outside a working copy"
git-update-index --refresh | sed 's/needs update$/locally modified/'
}
@@ -612,14 +612,14 @@ is_same_repo()
# second side...
if [ ! -w "$dir1" -o ! -w "$dir2" ]; then
# ...except in readonly setups.
- [ "$(readlink -f "$dir1")" = "$(readlink -f "$dir2")" ] && diff=0
+ [ "$(readlink -f "$dir1")" != "$(readlink -f "$dir2")" ] || diff=0
else
n=$$
while [ -e "$dir1/.,,lnstest-$n" -o -e "$dir2/.,,lnstest-$n" ]; do
n=$((n+1))
done
touch "$dir1/.,,lnstest-$n"
- [ -e "$dir2/.,,lnstest-$n" ] && diff=0
+ [ ! -e "$dir2/.,,lnstest-$n" ] || diff=0
rm "$dir1/.,,lnstest-$n"
fi
return $diff
@@ -655,7 +655,7 @@ deprecated_alias()
cmd="${0##*/}"
propername="$1"; shift
for a in "$@"; do
- [ "$cmd" = "$a" ] && \
+ [ "$cmd" != "$a" ] || \
warn "'$a' is a deprecated alias, please use '$propername' instead"
done
}
@@ -685,7 +685,7 @@ print_help()
echo
echo "Options:"
maxlen="$(sed -n 's/^# \(-.*\)::[^A-Za-z0-9].*/\1/p' < "$_cg_cmd" | column_width)"
- [ $maxlen -lt 11 ] && maxlen=11 # --long-help
+ [ $maxlen -ge 11 ] || maxlen=11 # --long-help
_cg_fmt=" %-20s %s\n"
sed -n 's/# \(-.*\)::[^A-Za-z0-9]\(.*\)/\1\n\2/p' < "$_cg_cmd" | while read line; do
case "$line" in
@@ -703,7 +703,7 @@ print_help()
}
for option in "$@"; do
- [ x"$option" = x-- ] && break
+ [ x"$option" != x-- ] || break
if [ x"$option" = x"-h" ] || [ x"$option" = x"--help" ]; then
print_help short "${_cg_cmd##cg-}"
elif [ x"$option" = x"--long-help" ]; then
@@ -753,8 +753,8 @@ optparse()
--) optshift; return 1 ;;
-*) return 0 ;;
*) while (( ++ARGPOS < ${#ARGS[@]} )); do
- [[ "${ARGS[$ARGPOS]}" == -- ]] && return 1
- [[ "${ARGS[$ARGPOS]}" == -* ]] && return 0
+ [[ "${ARGS[$ARGPOS]}" != -- ]] || return 1
+ [[ "${ARGS[$ARGPOS]}" != -* ]] || return 0
done;
return 1 ;;
esac
@@ -762,22 +762,26 @@ optparse()
CUROPT="${ARGS[$ARGPOS]}"
local match="${1%=}" minmatch="${2:-1}" opt="$CUROPT" o="$CUROPT" val
- [[ "$1" == *= ]] && val="$match"
+ [[ "$1" != *= ]] || val="$match"
case "$match" in
--*)
- [ "$val" ] && o="${o%%=*}"
+ [ -z "$val" ] || o="${o%%=*}"
[ ${#o} -ge $((2 + $minmatch)) -a \
"${match:0:${#o}}" = "$o" ] || return 1
- [[ -n "$val" && "$opt" == *=?* ]] \
- && ARGS[$ARGPOS]="${opt#*=}" \
- || optshift "$val" ;;
+ if [[ -n "$val" && "$opt" == *=?* ]]; then
+ ARGS[$ARGPOS]="${opt#*=}"
+ else
+ optshift "$val"
+ fi ;;
-?)
[[ "$o" == $match* ]] || return 1
[[ "$o" != -?-* || -n "$val" ]] || optfail
ARGS[$ARGPOS]=${o#$match}
- [ -n "${ARGS[$ARGPOS]}" ] \
- && { [ -n "$val" ] || ARGS[$ARGPOS]=-"${ARGS[$ARGPOS]}"; } \
- || optshift "$val" ;;
+ if [ -n "${ARGS[$ARGPOS]}" ]; then
+ [ -n "$val" ] || ARGS[$ARGPOS]=-"${ARGS[$ARGPOS]}";
+ else
+ optshift "$val"
+ fi ;;
*)
die "optparse cannot handle $1" ;;
esac
@@ -822,7 +826,7 @@ check_tool()
fi
done
IFS="$save_IFS"
- [ "$hasname" ] && break
+ [ -z "$hasname" ] || break
done 2>/dev/null
}
@@ -858,7 +862,7 @@ if [ ! "$_git_repo_unneeded" ]; then
_git=.
export GIT_DIR=.
fi
- [ "$GIT_DIR" = . ] && _git_no_wc=1
+ [ "$GIT_DIR" != . ] || _git_no_wc=1
if [ ! -d "$_git" ]; then
echo "There is no GIT repository here ($_git not found)" >&2
exit 1
@@ -870,8 +874,8 @@ if [ ! "$_git_repo_unneeded" ]; then
exit 1
fi
_git_head=master
- [ -s "$_git/HEAD" ] && { _git_head="$(git-symbolic-ref HEAD)"; _git_head="${_git_head#refs/heads/}"; }
- [ -s "$_git/head-name" ] && _git_head="$(cat "$_git/head-name")"
+ [ ! -s "$_git/HEAD" ] || { _git_head="$(git-symbolic-ref HEAD)"; _git_head="${_git_head#refs/heads/}"; }
+ [ ! -s "$_git/head-name" ] || _git_head="$(cat "$_git/head-name")"
fi
# Check if the script requires to be called from the workdir root.
diff --git a/cg-admin-rewritehist b/cg-admin-rewritehist
index 24670c7..9bb70cf 100755
--- a/cg-admin-rewritehist
+++ b/cg-admin-rewritehist
@@ -131,6 +131,8 @@ # committed a merge between P1 and P2, i
# and all children of the merge will become merge commits with P1,P2
# as their parents instead of the merge commit.
+set -e
+
USAGE="cg-admin-rewritehist [-d TEMPDIR] [-r STARTREV]... [FILTERS] DESTBRANCH"
_git_wc_unneeded=1
_git_requires_root=1
@@ -167,10 +169,10 @@ done
dstbranch="${ARGS[0]}"
[ -n "$dstbranch" ] || die "missing branch name"
-[ -s "$_git/refs/heads/$dstbranch" ] && die "branch $dstbranch already exists"
-[ -s "$_git/branches/$dstbranch" ] && die "branch $dstbranch is already a remote branch"
+[ ! -s "$_git/refs/heads/$dstbranch" ] || die "branch $dstbranch already exists"
+[ ! -s "$_git/branches/$dstbranch" ] || die "branch $dstbranch is already a remote branch"
-[ -e "$tempdir" ] && die "$tempdir already exists, please remove it"
+[ ! -e "$tempdir" ] || die "$tempdir already exists, please remove it"
mkdir -p "$tempdir/t"
cd "$tempdir/t"
^ permalink raw reply related
* University Diplomas
From: Zander Wilson @ 2006-04-17 13:07 UTC (permalink / raw)
To: git
NO ONE is turned down.
According to the U.S. Census Bureau, with the following degrees,
here's how much you can expect to make in your lifetime:
High School Diploma: $1,100,000
Bachelor's Degree: $2,100,000
Master's Degree: $2,500,000
Doctorate: $4,400,000
You Need a Better Degree, and we can Help!
Obtain degrees from Prestigious non-accredited
Universities based on you life experience.
NO ONE is turned down.
Call Now 7 days a week.
"1-718-504-5376"
^ permalink raw reply
* [PATCH] git-rev-list: fix --header
From: Johannes Schindelin @ 2006-04-17 12:51 UTC (permalink / raw)
To: git, junkio
gitk expects raw verbose headers limited by \0. Meet these expectations.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
This fixes the "clock format" bug I mentioned in another thread:
git-rev-list printed non-raw headers (lacking "author",
"committer", and the other lines), and thus, the author date was
empty.
rev-list.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
18f897509cd95b7e55c63e75fa40655c532507f6
diff --git a/rev-list.c b/rev-list.c
index 9d8db25..54e92f7 100644
--- a/rev-list.c
+++ b/rev-list.c
@@ -293,6 +293,7 @@ int main(int argc, const char **argv)
{
struct commit_list *list;
int i;
+ int header = 0;
init_revisions(&revs);
revs.abbrev = 0;
@@ -303,7 +304,8 @@ int main(int argc, const char **argv)
const char *arg = argv[i];
if (!strcmp(arg, "--header")) {
- revs.verbose_header = 1;
+ header = 1;
+ revs.commit_format = CMIT_FMT_UNSPECIFIED;
continue;
}
if (!strcmp(arg, "--timestamp")) {
@@ -324,6 +326,10 @@ int main(int argc, const char **argv)
revs.header_prefix = "";
else
revs.header_prefix = "commit ";
+ } else if (header) {
+ revs.verbose_header = 1;
+ revs.commit_format = CMIT_FMT_RAW;
+ hdr_termination = 0;
}
list = revs.commits;
--
1.2.0.ga8a6
^ permalink raw reply related
* [PATCH] Allow empty lines in info/grafts
From: Yann Dirson @ 2006-04-17 11:41 UTC (permalink / raw)
To: git
In addition to the existing comment support, that just allows the user
to use a convention that works pretty much everywhere else.
Signed-off-by: Yann Dirson <ydirson@altern.org>
---
commit.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/commit.c b/commit.c
index 05c4c92..2717dd8 100644
--- a/commit.c
+++ b/commit.c
@@ -160,7 +160,7 @@ struct commit_graft *read_graft_line(cha
if (buf[len-1] == '\n')
buf[--len] = 0;
- if (buf[0] == '#')
+ if (buf[0] == '#' || buf[0] == '\0')
return NULL;
if ((len + 1) % 41) {
bad_graft_data:
^ permalink raw reply related
* [ANNOUNCE qgit-1.0rc2]
From: Marco Costalba @ 2006-04-17 11:38 UTC (permalink / raw)
To: git
Two new main features:
1) Thanks to Johannes's new --patch-with-stat option in git-diff-tree
we can now show stat info at the beginning of the patch. (Still not
working with merges)
2) A more then 20% speed up due to a heavy optimizing work on some
internal structures.
Interesting enough also the text size has been shrunk of 24KB.
Now qgit is really very very very fast :-)
In my old PC a complete Linux tree loading (on warmed-up cache) passes
from 6.8s to 5.4s.
As a fair compare:
$ /usr/bin/time git-rev-list --header --topo-order --boundary
--parents HEAD > /dev/null
2.24user 0.20system 0:02.45elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+13268minor)pagefaults 0swaps
DOWNLOAD
Tarball is at
http://prdownloads.sourceforge.net/qgit/qgit-1.2rc2.tar.bz2?download
Git archive is at
http://digilander.libero.it/mcostalba/scm/qgit.git
See http://digilander.libero.it/mcostalba/ for detailed download information.
NOTE NOTE: you probably need to clone again the repository due to some
deleted revisions in the git archive.
INSTALLATION
To install from tarball use:
./configure
make
make install-strip
To install from git archive:
git clone http://digilander.libero.it/mcostalba/scm/qgit.git
cd qgit
autoreconf -i
./configure
make
make install-strip
Or check the shipped README for detailed information.
CHANGELOG
- show stat info in patch viewer. Use new --patch-with-stat
git-diff-tree option
- revisions storing update. Change revisions container and defer parsing
- use a circular buffer instead of a double buffer to load data
- defer graph lanes calculation. Drawing was already deferred
- remove useless option "File window always on top"
- pop-up a warning if external diff viewer fails to start
- add a pop-up menu in file list window
- avoid to show patches not in current StGIT branch
- fix StGIT commit to remove temporary files when finished
- small GUI tweaks
Marco
^ permalink raw reply
* Re: Fixes for option parsing
From: Junio C Hamano @ 2006-04-17 3:36 UTC (permalink / raw)
To: Linus Torvalds; +Cc: git
In-Reply-To: <Pine.LNX.4.64.0604161938070.3701@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
> Also, I think the "---" printing should be removed, and moved into the
> "diffstat" flushing code.
I am not sure if that belongs to diffstat flush. I was instead
planning to move it to diff-flush code, and show it only when we
actually show any diffs. IOW, I think we would want it even
when we are doing "--pretty -p", not "--pretty --patch-with-stat".
^ permalink raw reply
* [PATCH] Makefile fixups.
From: A Large Angry SCM @ 2006-04-17 3:17 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
Signed-off-by: A Large Angry SCM <gitzilla@gmail.com>
---
Makefile | 2 +-
t/Makefile | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
bb576e0c102e68cc55691fa4a5fc7e793e6e1219
diff --git a/Makefile b/Makefile
index 1130af4f3809610436f4c5d17c3970a947ddae5c..8371f7f522b6b02039af2a9d1684a8137197526e 100644
--- a/Makefile
+++ b/Makefile
@@ -653,7 +653,7 @@ ### Cleaning rules
clean:
rm -f *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o xdiff/*.o \
$(LIB_FILE) $(XDIFF_LIB)
- rm -f $(ALL_PROGRAMS) git$X
+ rm -f $(ALL_PROGRAMS) $(BUILT_INS) git$X
rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags
rm -rf $(GIT_TARNAME)
rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
diff --git a/t/Makefile b/t/Makefile
index fe65f53c5fbcf07bb69214b0f0cff8aef551e906..549598575b9fdcefe857ddef1b6d980a9773b033 100644
--- a/t/Makefile
+++ b/t/Makefile
@@ -25,5 +25,5 @@ clean:
rm -fr trash
.PHONY: $(T) clean
-.NOPARALLEL:
+.NOTPARALLEL:
--
1.3.0.rc4.g5bc4
^ permalink raw reply related
* Re: Fixes for option parsing
From: Linus Torvalds @ 2006-04-17 3:03 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <Pine.LNX.4.64.0604161938070.3701@g5.osdl.org>
On Sun, 16 Apr 2006, Linus Torvalds wrote:
>
> Maybe. I'm not convinced, though. The reason? cmd_log_wc needs to generate
> it regardless, for the "always" case.
Of course, you could just have the "diff" logic unconditionally do the
call-back. That would be clean enough.
> Also, I think the "---" printing should be removed, and moved into the
> "diffstat" flushing code. Right now it does the wrong thing entirely if
> no diff exists, but we have always_show_header: it will print the "---"
> for no good reason.
The alternative is to do something like this, but because the "diffstat"
doesn't flush the header priperly, it doesn't add the "---" for merges
(and it used to not show the log at all, even for "git log", before I
fixed it).
Try it with
git log --cc --patch-with-stat
to see what I mean.
I do agree that this would be much cleaner with a "print header" callback
in the diffopt structure. This patch is the really hacky "continue to do
things the ugly way" approach to fix some of the uglier output.
Only meant as a RFC and to illustrate what I think the output should look
like (modulo the lack of "---" before a diffstat with no patch - for
merges). Not meant to actually be applied, I think this can be done much
more cleanly with the callback.
Linus
---
diff --git a/git.c b/git.c
index fc4e429..dc577fa 100644
--- a/git.c
+++ b/git.c
@@ -284,7 +284,7 @@ static int cmd_log_wc(int argc, const ch
struct commit *commit;
char *buf = xmalloc(LOGSIZE);
const char *commit_prefix = "commit ";
- int shown = 0;
+ int shown = 0, always_show_header;
rev->abbrev = DEFAULT_ABBREV;
rev->commit_format = CMIT_FMT_DEFAULT;
@@ -295,13 +295,19 @@ static int cmd_log_wc(int argc, const ch
if (rev->commit_format == CMIT_FMT_ONELINE)
commit_prefix = "";
+ /*
+ * We handle always_show_header outselves, and leave the
+ * "---" handling to log_tree_commit
+ */
+ always_show_header = rev->always_show_header;
+ rev->always_show_header = 0;
+
prepare_revision_walk(rev);
setup_pager();
while ((commit = get_revision(rev)) != NULL) {
unsigned long ofs = 0;
- if (shown && rev->diff &&
- rev->commit_format != CMIT_FMT_ONELINE)
+ if (shown && rev->commit_format != CMIT_FMT_ONELINE)
putchar('\n');
ofs = sprintf(buf, "%s", commit_prefix);
@@ -338,14 +344,16 @@ static int cmd_log_wc(int argc, const ch
buf + ofs,
LOGSIZE - ofs - 20,
rev->abbrev);
+ if (always_show_header || !rev->diff) {
+ fputs(buf, stdout);
+ ofs = 0;
+ }
if (rev->diff) {
+ strcpy(buf + ofs, rev->diffopt.with_stat ? "---" : "\n");
rev->use_precomputed_header = buf;
- strcpy(buf + ofs, "\n---\n");
log_tree_commit(rev, commit);
}
- else
- printf("%s\n", buf);
shown = 1;
free(commit->buffer);
commit->buffer = NULL;
^ permalink raw reply related
* Re: path limiting broken
From: Linus Torvalds @ 2006-04-17 2:48 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git
In-Reply-To: <Pine.LNX.4.63.0604170138470.824@wbgn013.biozentrum.uni-wuerzburg.de>
On Mon, 17 Apr 2006, Johannes Schindelin wrote:
>
> Since quite some time, I wanted to have a way to git-rev-list just the
> revs between commit1 and commit2, i.e. all commits which are ancestors of
> commit2, and which have commit1 as ancestor. With this, my task would have
> been more than simple.
Yes. However, it's not trivial.
In fact, what you want is not what you claim you want. To be useful in
general, you have to _also_ handle the case of "commit2" not beign a
strict ancestor of "commit1". So what you actually want to do is
- calculate the merge-head of cmit1 and cmit2 (and if there are multiple,
pick some "best" one).
- pick the shortest path from the merge-head to the cmit1 (and, with a
flag, also pick the path from merge-head to cmit2 - sometimes you want
to see the whole path from one to the other, sometimes you might want
to see just the path from the last common point).
I suspect it ends up being not _that_ different from calculating the
bisection point, but I haven't thought it through entirely.
Linus
^ permalink raw reply
* Re: Fixes for option parsing
From: Linus Torvalds @ 2006-04-17 2:42 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7vbqv1oxie.fsf@assigned-by-dhcp.cox.net>
On Sun, 16 Apr 2006, Junio C Hamano wrote:
>
> In the mid-term, I am hoping we can drop the generate_header()
> callchain _and_ the custom code that formats commit log in-core,
> found in cmd_log_wc().
Maybe. I'm not convinced, though. The reason? cmd_log_wc needs to generate
it regardless, for the "always" case.
Also, I think the "---" printing should be removed, and moved into the
"diffstat" flushing code. Right now it does the wrong thing entirely if no
diff exists, but we have always_show_header: it will print the "---" for
no good reason.
> I wish this "diff-tree SHA1 (from ANOTHERSHA1)" format can be
> dropped and replaced with "commit SHA1" format like "git log"
> does uniformly, but it might be already depended upon by
> Porcelains.
I think it might be worth just trying. A lot of the formats were pretty
ad-hoc, and since everybody had their own routines, there was no reason to
even try to keep them similar. Now, we'd be better off trying to make them
look as close to each other as possible, and I suspect there's not a lot
of porcelain that cares deeply about that format..
Linus
^ permalink raw reply
* [PATCH] rev-list --boundary: show boundary commits even when limited otherwise.
From: Junio C Hamano @ 2006-04-17 1:53 UTC (permalink / raw)
To: Yann Dirson; +Cc: git, Linus Torvalds
In-Reply-To: <7vslodp4sk.fsf@assigned-by-dhcp.cox.net>
The boundary commits are shown for UI like gitk to draw them as
soon as topo-order sorting allows, and should not be omitted by
get_revision() filtering logic. As long as their immediate
child commits are shown, we should not filter them out.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
> The real issue is "git-rev-list --boundary ran..ge -- path" does
> not show boundary. I am not sure if it even worked in the past;
> will take a look.
I _think_ this fixes it, but this is rev-list which I feel a
bit uneasy touching. A lower-impact approach of not filtering
BOUNDARY commits at all does not work well; it shows many
isolated open-circle commits in gitk that do not touch the
specified paths.
I got tired of updating the private object.flags users, so
just reserved the lower 16 bits for use of revision.c while I
was at it.
http-push.c | 10 +++++-----
rev-list.c | 4 ++--
revision.c | 29 +++++++++++++++++++++++++++--
revision.h | 3 ++-
4 files changed, 36 insertions(+), 10 deletions(-)
298196646f35b6f5bc2131074204826d39aff8cf
diff --git a/http-push.c b/http-push.c
index 19a0f77..e7f7f44 100644
--- a/http-push.c
+++ b/http-push.c
@@ -60,12 +60,12 @@ #define LOCK_REQUEST "<?xml version=\"1.
#define LOCK_TIME 600
#define LOCK_REFRESH 30
-/* bits #0-6 in revision.h */
+/* bits #0-15 in revision.h */
-#define LOCAL (1u << 7)
-#define REMOTE (1u << 8)
-#define FETCHING (1u << 9)
-#define PUSHING (1u << 10)
+#define LOCAL (1u<<16)
+#define REMOTE (1u<<17)
+#define FETCHING (1u<<18)
+#define PUSHING (1u<<19)
/* We allow "recursive" symbolic refs. Only within reason, though */
#define MAXDEPTH 5
diff --git a/rev-list.c b/rev-list.c
index 963707a..f5511e7 100644
--- a/rev-list.c
+++ b/rev-list.c
@@ -8,9 +8,9 @@ #include "tree-walk.h"
#include "diff.h"
#include "revision.h"
-/* bits #0-6 in revision.h */
+/* bits #0-15 in revision.h */
-#define COUNTED (1u<<7)
+#define COUNTED (1u<<16)
static const char rev_list_usage[] =
"git-rev-list [OPTION] <commit-id>... [ -- paths... ]\n"
diff --git a/revision.c b/revision.c
index 0505f3f..e1f9816 100644
--- a/revision.c
+++ b/revision.c
@@ -750,6 +750,17 @@ static void rewrite_parents(struct rev_i
}
}
+static void mark_boundary_to_show(struct commit *commit)
+{
+ struct commit_list *p = commit->parents;
+ while (p) {
+ commit = p->item;
+ p = p->next;
+ if (commit->object.flags & BOUNDARY)
+ commit->object.flags |= BOUNDARY_SHOW;
+ }
+}
+
struct commit *get_revision(struct rev_info *revs)
{
struct commit_list *list = revs->commits;
@@ -787,8 +798,20 @@ struct commit *get_revision(struct rev_i
}
if (commit->object.flags & SHOWN)
continue;
- if (!(commit->object.flags & BOUNDARY) &&
- (commit->object.flags & UNINTERESTING))
+
+ /* We want to show boundary commits only when their
+ * children are shown. When path-limiter is in effect,
+ * rewrite_parents() drops some commits from getting shown,
+ * and there is no point showing boundary parents that
+ * are not shown. After rewrite_parents() rewrites the
+ * parents of a commit that is shown, we mark the boundary
+ * parents with BOUNDARY_SHOW.
+ */
+ if (commit->object.flags & BOUNDARY_SHOW) {
+ commit->object.flags |= SHOWN;
+ return commit;
+ }
+ if (commit->object.flags & UNINTERESTING)
continue;
if (revs->min_age != -1 && (commit->date > revs->min_age))
continue;
@@ -801,6 +824,8 @@ struct commit *get_revision(struct rev_i
if (revs->parents)
rewrite_parents(revs, commit);
}
+ if (revs->boundary)
+ mark_boundary_to_show(commit);
commit->object.flags |= SHOWN;
return commit;
} while (revs->commits);
diff --git a/revision.h b/revision.h
index 8970b57..4b27043 100644
--- a/revision.h
+++ b/revision.h
@@ -7,7 +7,8 @@ #define TREECHANGE (1u<<2)
#define SHOWN (1u<<3)
#define TMP_MARK (1u<<4) /* for isolated cases; clean after use */
#define BOUNDARY (1u<<5)
-#define ADDED (1u<<6) /* Parents already parsed and added? */
+#define BOUNDARY_SHOW (1u<<6)
+#define ADDED (1u<<7) /* Parents already parsed and added? */
struct rev_info;
--
1.3.0.rc4.g878b
^ permalink raw reply related
* Re: [BUG] gitk: breaks with both version and file limits
From: Paul Mackerras @ 2006-04-17 0:38 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Yann Dirson, git
In-Reply-To: <7vslodp4sk.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano writes:
> The real issue is "git-rev-list --boundary ran..ge -- path" does
> not show boundary. I am not sure if it even worked in the past;
> will take a look.
Ah... and in addextraid I wasn't appending a 0 to commitlisted, so
commitlisted got out of sync with the displayorder list. I just
committed this patch, which keeps them in sync. I think that's
preferable to working around the missing elements.
Paul.
diff --git a/gitk b/gitk
index f88c06e..87e7162 100755
--- a/gitk
+++ b/gitk
@@ -1116,11 +1116,12 @@ proc layoutrows {row endrow last} {
proc addextraid {id row} {
global displayorder commitrow commitinfo
- global commitidx
+ global commitidx commitlisted
global parentlist childlist children
incr commitidx
lappend displayorder $id
+ lappend commitlisted 0
lappend parentlist {}
set commitrow($id) $row
readcommit $id
@@ -1500,7 +1501,7 @@ proc drawcmittext {id row col rmx} {
proc drawcmitrow {row} {
global displayorder rowidlist
global idrowranges idrangedrawn iddrawn
- global commitinfo commitlisted parentlist numcommits
+ global commitinfo parentlist numcommits
if {$row >= $numcommits} return
foreach id [lindex $rowidlist $row] {
^ permalink raw reply related
* Re: Fixes for option parsing
From: Junio C Hamano @ 2006-04-17 0:29 UTC (permalink / raw)
To: Linus Torvalds; +Cc: git
In-Reply-To: <Pine.LNX.4.64.0604161433000.3701@g5.osdl.org>
Thanks for fixing this. I've applied and merged it to the
"next" branch.
In the mid-term, I am hoping we can drop the generate_header()
callchain _and_ the custom code that formats commit log in-core,
found in cmd_log_wc(). rev->use_precomputed_header and perhaps
rev->header can be dropped and replaced with a call to a
function to print formatted log to stdout (or perhaps a FILE *,
because I want to reuse this to make output part of
"git-format-patch" internal) from log-tree.
For that, I'd need to define a new CMIT_FMT for the format-patch
output. Another thing needed is to clean up the commit_prefix
local variable defined in cmd_log_wc() -- it should use
rev->header_prefix, but before that the part that rewrites
opt->header_prefix to have a blank line between commits, in
log-tree.c::do_diff_combined() and log_tree_commit() need to be
cleaned up.
For the header_prefix line, there also is a subtle difference
between the one-commit diff-tree and log. The former lists
"this commit (from that commit)", which is perhaps useful for
cut and paste purposes. The latter just says "this commit".
I wish this "diff-tree SHA1 (from ANOTHERSHA1)" format can be
dropped and replaced with "commit SHA1" format like "git log"
does uniformly, but it might be already depended upon by
Porcelains.
If the commit is not a merge, "commit SHA1" means the same thing
as "diff-tree SHA1 (from SHA1^)", and if it _is_ a merge, then
the merge parents are listed on the "Merge: " line anyway for
all formats other than --pretty=oneline, so unless this change
breaks an Porcelain, there is really no downside.
^ permalink raw reply
* Re: path limiting broken
From: Johannes Schindelin @ 2006-04-16 23:49 UTC (permalink / raw)
To: Linus Torvalds; +Cc: git
In-Reply-To: <Pine.LNX.4.64.0604161117360.3701@g5.osdl.org>
Hi,
On Sun, 16 Apr 2006, Linus Torvalds wrote:
> On Sun, 16 Apr 2006, Johannes Schindelin wrote:
> >
> > Thanks for all your help, but in this case it was not irrelevant. Because
> > I *had* the function in my working copy. And I had changed it. So I had to
> > find out where to move the change.
>
> Right, but it was irrelevant as far as "top-of-head" was concerned (which
> is all that "git log" shows you - it doesn't care about your working
> tree).
>
> The fact that it _had_ been relevant in the state you used to be at is not
> something "git log" and friends know or care about.
>
> Now, I'm not disputing that we might want to make it easier to see what
> _had_ been relevant at some earlier time. But you'd have to specify that
> earlier time somehow.
Since quite some time, I wanted to have a way to git-rev-list just the
revs between commit1 and commit2, i.e. all commits which are ancestors of
commit2, and which have commit1 as ancestor. With this, my task would have
been more than simple.
> I assume you had tried to do a "git rebase", and the problem with that
> is that git rebase really doesn't help you at all when things go wrong,
> exactly because "rebase" - by design - screws up the history and loses
> that information for you.
Nope. Was a merge.
> If your problem state had been as a result of a "git merge", you'd
> actually have had much better tools available to you, exactly because
> merge doesn't screw up history, so you've got both sides of the merge you
> can look at (HEAD and MERGE_HEAD, and "git diff --ours" and "--theirs").
That outputs too much. I really wanted to find just the commit which
removed the function, in order to know where the code was moved to.
ORIG_HEAD would not help, because that commit is not an ancestor.
> [...] In particular, you can do
>
> gitk ORIG_HEAD..
... and it will say
Error: expected integer but got ""
while executing
"clock format $d -format "%Y-%m-%d %H:%M:%S ""
(procedure "formatdate" line 2)
invoked from within
"formatdate $date"
(procedure "drawcmittext" line 28)
invoked from within
"drawcmittext $id $row $col $rmx"
(procedure "drawcmitrow" line 41)
invoked from within
"drawcmitrow $row"
(procedure "showstuff" line 35)
invoked from within
"showstuff $canshow"
(procedure "layoutmore" line 15)
invoked from within
"layoutmore"
(procedure "getcommitlines" line 91)
invoked from within
"getcommitlines file7"
Sorry, I am too tired now to investigate, have been working already to
long. Tomorrow's another day.
Ciao,
Dscho
^ permalink raw reply
* Fixes for option parsing
From: Linus Torvalds @ 2006-04-16 22:17 UTC (permalink / raw)
To: Junio C Hamano, Git Mailing List
Make sure "git show" always show the header, regardless of whether there
is a diff or not.
Also, make sure "always_show_header" actually works, since generate_header
only tested it in one out of three return paths.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---
diff --git a/git.c b/git.c
index c5de8d3..fc4e429 100644
--- a/git.c
+++ b/git.c
@@ -373,6 +373,7 @@ static int cmd_show(int argc, const char
rev.diffopt.recursive = 1;
rev.combine_merges = 1;
rev.dense_combined_merges = 1;
+ rev.always_show_header = 1;
rev.ignore_merges = 0;
rev.no_walk = 1;
return cmd_log_wc(argc, argv, envp, &rev);
diff --git a/log-tree.c b/log-tree.c
index 7d9f41e..81dff8f 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -43,7 +43,7 @@ static int diff_root_tree(struct rev_inf
return retval;
}
-static const char *generate_header(struct rev_info *opt,
+static const char *get_header(struct rev_info *opt,
const unsigned char *commit_sha1,
const unsigned char *parent_sha1,
const struct commit *commit)
@@ -75,11 +75,21 @@ static const char *generate_header(struc
offset += pretty_print_commit(opt->commit_format, commit, len,
this_header + offset,
sizeof(this_header) - offset, abbrev);
+ return this_header;
+}
+
+static const char *generate_header(struct rev_info *opt,
+ const unsigned char *commit_sha1,
+ const unsigned char *parent_sha1,
+ const struct commit *commit)
+{
+ const char *header = get_header(opt, commit_sha1, parent_sha1, commit);
+
if (opt->always_show_header) {
- puts(this_header);
- return NULL;
+ puts(header);
+ header = NULL;
}
- return this_header;
+ return header;
}
static int do_diff_combined(struct rev_info *opt, struct commit *commit)
^ permalink raw reply related
* Re: [BUG] gitk: breaks with both version and file limits
From: Junio C Hamano @ 2006-04-16 21:51 UTC (permalink / raw)
To: Yann Dirson; +Cc: git, Paul Mackerras
In-Reply-To: <20060416115403.GS12638@nowhere.earth>
Yann Dirson <ydirson@altern.org> writes:
> As an example, on a current git tree, the following command triggers
> an 'Error: expected boolean value but got ""' dialog when scrolling to
> the bottom of the graph, and leaves the bottom of the graph not drawn.
> This happens with current master, but not with 1.2.4.
A workaround errorproofing would be to do something like this
(note that I do not really speak Tcl).
The real issue is "git-rev-list --boundary ran..ge -- path" does
not show boundary. I am not sure if it even worked in the past;
will take a look.
-- >8 --
gitk: [lindex $list $no_such_idx] returns "" which is not a valid bool
When asking for commit that is not listed for some reason in
commitlisted, gitk barfed because return value from lindex was
"" which was not a bool acceptable in ($bool ? A : B) construct.
We are expecting "1" here for listed commits (this comes from
getcommitlines), so explicitly check for it.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
diff --git a/gitk b/gitk
index f88c06e..5d2b0cc 100755
--- a/gitk
+++ b/gitk
@@ -1460,7 +1460,7 @@ proc drawcmittext {id row col rmx} {
global linehtag linentag linedtag
global mainfont namefont canvxmax
- set ofill [expr {[lindex $commitlisted $row]? "blue": "white"}]
+ set ofill [expr {("1" == [lindex $commitlisted $row]) ? "blue" : "white"}]
set x [xc $row $col]
set y [yc $row]
set orad [expr {$linespc / 3}]
^ permalink raw reply related
* [PATCH] reading $GIT_DIR/info/graft - skip comments correctly.
From: Junio C Hamano @ 2006-04-16 21:26 UTC (permalink / raw)
To: Yann Dirson; +Cc: git
In-Reply-To: <20060416123535.GT12638@nowhere.earth>
Noticed by Yann Dirson.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
Yann Dirson <ydirson@altern.org> writes:
> While looking at allowing empty lines in grafts files, I discovered
> that comments had already been implemented. However, current
> git-read-tree segfaults when there is a comment line in info/grafts:
>
> dwitch@gandelf:/export/work/yann/git/git$ cat .git/info/grafts
> c118c026e44f02c3dbad00d924285eef2340f700
> # foo
> dwitch@gandelf:/export/work/yann/git/git$ git-read-tree master
> Segmentation fault
Thanks for noticing.
commit.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
5bc4ce589646faf72c7a77a5d32d9496ccc8d456
diff --git a/commit.c b/commit.c
index ca25574..05c4c92 100644
--- a/commit.c
+++ b/commit.c
@@ -161,7 +161,7 @@ struct commit_graft *read_graft_line(cha
if (buf[len-1] == '\n')
buf[--len] = 0;
if (buf[0] == '#')
- return 0;
+ return NULL;
if ((len + 1) % 41) {
bad_graft_data:
error("bad graft data: %s", buf);
@@ -192,6 +192,8 @@ int read_graft_file(const char *graft_fi
/* The format is just "Commit Parent1 Parent2 ...\n" */
int len = strlen(buf);
struct commit_graft *graft = read_graft_line(buf, len);
+ if (!graft)
+ continue;
if (register_commit_graft(graft, 1))
error("duplicate graft data: %s", buf);
}
--
1.3.0.rc4.g4024
^ permalink raw reply related
* [PATCH] Make cogito work with accented letters.
From: Yann Dirson @ 2006-04-16 20:46 UTC (permalink / raw)
To: Petr Baudis; +Cc: git
git-diff-index in default mode has an annoying behaviour wrt filenames
containing non-ascii chars. As suggested by Pasky, we can use -z
mode, which gives us a much better way of handling all other special
chars. With associated testcases ensuring it works with simple and
double quotes, backslashes, and spaces as well.
This is an improved version of the previous patch, which fixes other
commands like cg-switch which use tree_timewarp. A couple of other
commands using git-diff-index still need to be fixed in a similar
manner.
Signed-off-by: Yann Dirson <ydirson@altern.org>
---
cg-Xlib | 7 ++----
cg-commit | 10 ++++----
t/t9900-specialchars.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 67 insertions(+), 9 deletions(-)
diff --git a/cg-Xlib b/cg-Xlib
index 38172a0..e594986 100755
--- a/cg-Xlib
+++ b/cg-Xlib
@@ -555,10 +555,9 @@ tree_timewarp()
[ "$no_head_update" ] || git-update-ref HEAD "$branch" || :
# Kill gone files
- git-diff-tree -r "$base" "$branch" |
- # match ":100755 000000 14d43b1abf... 000000000... D"
- sed -ne 's/^:[^\t]* D\t//p' |
- xargs rm -f --
+ git-diff-tree -z --name-status -r "$base" "$branch" |
+ perl -n0e 'chomp; if (defined $meta) { print "$_\0" if $meta eq 'D'; $meta=undef } else { $meta = $_ }' |
+ xargs --null rm -f --
git-checkout-index -u -f -a
# FIXME: Can produce bogus "contains only garbage" messages.
diff --git a/cg-commit b/cg-commit
index 8dac57c..1d8de92 100755
--- a/cg-commit
+++ b/cg-commit
@@ -274,8 +274,8 @@ if [ "$ARGS" -o "$_git_relpath" ]; then
echo "${_git_relpath}$file" >>"$filter"
done
- eval "commitfiles=($(cat "$filter" | path_xargs git-diff-index -r -m HEAD -- | \
- sed -e 's/"\|\\/\\&/g' -e 's/^\([^ ]*\)\(.\) \(.*\)\( .*\)*$/"\2 \3"/'))"
+ eval "commitfiles=($(cat "$filter" | path_xargs git-diff-index --name-status -z -r -m HEAD -- | \
+ perl -n0e 'chomp; if (defined $meta) { s/([\"\\])/\\\1/; print "\"$meta $_\"\n"; $meta=undef } else { $meta = $_ }'))"
customfiles=1
[ "$review" ] && cat "$filter" | path_xargs git-diff-index -r -m -p HEAD -- > "$PATCH"
@@ -292,8 +292,8 @@ else
if [ ! "$ignorecache" ]; then
# \t instead of the tab character itself works only with new
# sed versions.
- eval "commitfiles=($(git-diff-index -r -m HEAD | \
- sed -e 's/"\|\\/\\&/g' -e 's/^\([^ ]*\)\(.\) \(.*\)\( .*\)*$/"\2 \3"/'))"
+ eval "commitfiles=($(git-diff-index --name-status -z -r -m HEAD | \
+ perl -n0e 'chomp; if (defined $meta) { s/([\"\\])/\\\1/; print "\"$meta $_\"\n"; $meta=undef } else { $meta = $_ }'))"
if [ -s "$_git/commit-ignore" ]; then
newcommitfiles=()
@@ -439,7 +439,7 @@ __END__
exit 1
fi
if [ ! "$ignorecache" ] && [ ! "$merging" ] && [ ! "$review" ]; then
- eval "newcommitfiles=($(grep ^CG:F "$LOGMSG2" | sed 's/^CG:F *\(.*\)$/"\1"/'))"
+ eval "newcommitfiles=($(grep ^CG:F "$LOGMSG2" | sed -e 's/\"/\\&/g' -e 's/^CG:F *\(.*\)$/"\1"/'))"
if [ ! "$force" ] && [ ! "${newcommitfiles[*]}" ]; then
rm "$LOGMSG" "$LOGMSG2"
[ "$quiet" ] && exit 0 || die 'Nothing to commit'
diff --git a/t/t9900-specialchars.sh b/t/t9900-specialchars.sh
new file mode 100755
index 0000000..a705052
--- /dev/null
+++ b/t/t9900-specialchars.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2006 Yann Dirson
+#
+test_description="Tests various commands with shell-special chars.
+
+Filenames with embedded spaces, quotes, non-ascii letter, you name it."
+
+. ./test-lib.sh
+
+rm -rf .git
+cg-init -m .
+
+touch "a space"
+test_expect_success 'add file with space' 'cg-add "a space"'
+test_expect_success 'commit file with space' 'cg-commit -m . "a space"'
+
+touch "a'quote"
+test_expect_success 'add file with quote' "cg-add \"a'quote\""
+test_expect_success 'commit file with quote' "cg-commit -m . \"a'quote\""
+
+touch "d\"quote"
+test_expect_success 'add file with accent' 'cg-add "d\"quote"'
+test_expect_success 'commit file with quote' 'cg-commit -m . "d\"quote"'
+
+touch "back\\slash"
+test_expect_success 'add file with accent' 'cg-add "back\\slash"'
+test_expect_success 'commit file with quote' 'cg-commit -m . "back\\slash"'
+
+touch "accént"
+test_expect_success 'add file with accent' "cg-add accént"
+test_expect_success 'commit file with quote' "cg-commit -m . accént"
+
+## same without a file arg to cg-commit
+
+rm -rf * .git
+cg-init -m .
+
+touch "a space"
+test_expect_success 'add file with space' 'cg-add "a space"'
+test_expect_success 'commit file with space' 'cg-commit -m .'
+
+touch "a'quote"
+test_expect_success 'add file with quote' "cg-add \"a'quote\""
+test_expect_success 'commit file with quote' "cg-commit -m ."
+
+touch "d\"quote"
+test_expect_success 'add file with accent' 'cg-add "d\"quote"'
+test_expect_success 'commit file with quote' 'cg-commit -m .'
+
+touch "back\\slash"
+test_expect_success 'add file with accent' 'cg-add "back\\slash"'
+test_expect_success 'commit file with quote' 'cg-commit -m .'
+
+touch "accént"
+test_expect_success 'add file with accent' "cg-add accént"
+test_expect_success 'commit file with quote' "cg-commit -m ."
+
+test_done
^ permalink raw reply related
* [PATCH] Test that pulls a patch creating a file that got modified afterwards
From: Yann Dirson @ 2006-04-16 20:40 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git
In-Reply-To: <20060416203448.10137.69093.stgit@gandelf.nowhere.earth>
From: Yann Dirson <ydirson@altern.org>
This demonstrates an issue wite has bitten me more than once: the stg
branch adds a file in one patch, and modifies it in a later patch; then all
patches get integrated in upstream tree, and at "stg pull" time, stgit
believes there is a conflict, even when the patches are exactly the same.
This is normal as it requires the --merged flag on push or pull. So
we rollback with "push --undo" and "push --merge" to finish.
---
t/t1200-push-modified.sh | 64 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/t/t1200-push-modified.sh b/t/t1200-push-modified.sh
new file mode 100755
index 0000000..7847a38
--- /dev/null
+++ b/t/t1200-push-modified.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+#
+# Copyright (c) 2006 Yann Dirson
+#
+
+test_description='Exercise pushing patches applied upstream.
+
+Especially, consider the case of a patch that adds a file, while a
+subsequent one modifies it, so we have to use --merged for push to
+detect the merge. Reproduce the common workflow where one does not
+specify --merged, then rollback and retry with the correct flag.'
+
+. ./test-lib.sh
+
+# don't need this repo, but better not drop it, see t1100
+#rm -rf .git
+
+# Need a repo to clone
+test_create_repo foo
+
+test_expect_success \
+ 'Clone tree and setup changes' \
+ "stg clone foo bar &&
+ (cd bar && stg new p1 -m p1
+ printf 'a\nc\n' > file && stg add file && stg refresh &&
+ stg new p2 -m p2
+ printf 'a\nb\nc\n' > file && stg refresh
+ )
+"
+
+test_expect_success \
+ 'Port those patches to orig tree' \
+ "(cd foo &&
+ GIT_DIR=../bar/.git git-format-patch --stdout bases/master..HEAD |
+ git-am -3 -k
+ )
+"
+
+test_expect_success \
+ 'Pull to sync with parent, preparing for the problem' \
+ "(cd bar && stg pop --all &&
+ stg pull
+ )
+"
+
+test_expect_failure \
+ 'Attempt to push the first of those patches without --merged' \
+ "(cd bar && stg push
+ )
+"
+
+test_expect_success \
+ 'Rollback the push' \
+ "(cd bar && stg push --undo
+ )
+"
+
+test_expect_success \
+ 'Push those patches while checking they were merged upstream' \
+ "(cd bar && stg push --merged --all
+ )
+"
+
+test_done
^ permalink raw reply related
* [PATCH] Updated testcases for stgit pull with merge
From: Yann Dirson @ 2006-04-16 20:34 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git
[Sorry for the previous buggy post]
In the previous series, patch 7 mostly demonstrate that I have missed
the appearance of the --merged flag in stgit 0.9 push and pull
commands, so we could just amend this testcase with that flag.
However, it appears that common workflow of forgetting that flag, then
trying to undo the failed push, and re-pushing with the flag still shows
a problem, as hopefully shown by this updated testcase.
As for the testcase in patch 8, it still demonstrates a problem IMHO:
the push without the --merged flag should have failed in much the same
way this one does. However, I have seen GNU patch showing a similar
behaviour, so it is maybe not stgit's fault.
--
Yann Dirson <ydirson@altern.org> |
Debian-related: <dirson@debian.org> | Support Debian GNU/Linux:
| Freedom, Power, Stability, Gratis
http://ydirson.free.fr/ | Check <http://www.debian.org/>
^ permalink raw reply
* [PATCH 0/2] Updated testcases for stgit pull with merge
From: Yann Dirson @ 2006-04-16 20:31 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git
In the previous series, patch 7 mostly demonstrate that I have
missed the appearance of the --merged flag in stgit 0.9 push and pull
commands.
--
Yann Dirson <ydirson@altern.org> |
Debian-related: <dirson@debian.org> | Support Debian GNU/Linux:
| Freedom, Power, Stability, Gratis
http://ydirson.free.fr/ | Check <http://www.debian.org/>
^ permalink raw reply
* Re: path limiting broken
From: Linus Torvalds @ 2006-04-16 18:27 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git
In-Reply-To: <Pine.LNX.4.63.0604162006050.19560@wbgn013.biozentrum.uni-wuerzburg.de>
On Sun, 16 Apr 2006, Johannes Schindelin wrote:
>
> There's another reason it does not show it. ATM, you have to add "-p" to
> the command line, or "-c" will not show *any* patch, let alone a combined
> one.
Oh, it will show the "raw" patch, which is often very useful. I've grown
quite fond of it, because it shows what happened on a bigger level,
without showing the details within a file ("--name-status" makes it more
readable, but I'm too lazy to type it, so I often just look at the raw
git patch).
> Thanks for all your help, but in this case it was not irrelevant. Because
> I *had* the function in my working copy. And I had changed it. So I had to
> find out where to move the change.
Right, but it was irrelevant as far as "top-of-head" was concerned (which
is all that "git log" shows you - it doesn't care about your working
tree).
The fact that it _had_ been relevant in the state you used to be at is not
something "git log" and friends know or care about.
Now, I'm not disputing that we might want to make it easier to see what
_had_ been relevant at some earlier time. But you'd have to specify that
earlier time somehow. I assume you had tried to do a "git rebase", and the
problem with that is that git rebase really doesn't help you at all when
things go wrong, exactly because "rebase" - by design - screws up the
history and loses that information for you.
If your problem state had been as a result of a "git merge", you'd
actually have had much better tools available to you, exactly because
merge doesn't screw up history, so you've got both sides of the merge you
can look at (HEAD and MERGE_HEAD, and "git diff --ours" and "--theirs").
That said, even "rebase" will help somewhat. You've got "ORIG_HEAD" to
use, and that should help at least a _bit_. In particular, you can do
gitk ORIG_HEAD..
to see all the changes you rebased across. But right now you'd have to
fall back on the "-m -p" thing if you wanted to see it all..
Linus
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox