Skip to content

Commit

Permalink
GIT 0.99.9g
Browse files Browse the repository at this point in the history
Another snapshot, as slow and steady marth towards 1.0 continues.
Major changes include:

 - Jim Radford's RPM split.
 - Fredrik's recursive merge strategy is now default for two heads merge.
 - Yaacov's SVN importer updates.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Nov 10, 2005
2 parents 5ca15b8 + a1c2929 commit 23ea3e2
Show file tree
Hide file tree
Showing 19 changed files with 256 additions and 115 deletions.
4 changes: 0 additions & 4 deletions Documentation/build-docdep.perl
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,11 @@
while ($changed) {
$changed = 0;
while (my ($text, $included) = each %include) {
print STDERR "Looking at $text...\n";
for my $i (keys %$included) {
print STDERR "$text includes $i.\n";
# $text has include::$i; if $i includes $j
# $text indirectly includes $j.
if (exists $include{$i}) {
print STDERR "$i includes something.\n";
for my $j (keys %{$include{$i}}) {
print STDERR "$text includes $i include $j\n";
if (!exists $include{$text}{$j}) {
$include{$text}{$j} = 1;
$included{$j} = 1;
Expand Down
4 changes: 3 additions & 1 deletion Documentation/git-tag.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ git-tag - Create a tag object signed with GPG

SYNOPSIS
--------
'git-tag' [-a | -s | -u <key-id>] [-f] [-m <msg>] <name> [<head>]
'git-tag' [-a | -s | -u <key-id>] [-f | -d] [-m <msg>] <name> [<head>]

DESCRIPTION
-----------
Expand All @@ -30,6 +30,8 @@ A GnuPG signed tag object will be created when `-s` or `-u
committer identity for the current user is used to find the
GnuPG key for signing.

`-d <tag>` deletes the tag.


Author
------
Expand Down
14 changes: 7 additions & 7 deletions Documentation/howto/using-topic-branches.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ GIT as a Linux subsystem maintainer.

-Tony

Last updated w.r.t. GIT 0.99.5
Last updated w.r.t. GIT 0.99.9f

Linux subsystem maintenance using GIT
-------------------------------------
Expand Down Expand Up @@ -89,8 +89,8 @@ out at the current tip of the linus branch.

These can be easily kept up to date by merging from the "linus" branch:

$ git checkout test && git resolve test linus "Auto-update from upstream"
$ git checkout release && git resolve release linus "Auto-update from upstream"
$ git checkout test && git merge "Auto-update from upstream" test linus
$ git checkout release && git merge "Auto-update from upstream" release linus

Set up so that you can push upstream to your public tree (you need to
log-in to the remote system and create an empty tree there before the
Expand Down Expand Up @@ -128,7 +128,7 @@ commit to this branch.
When you are happy with the state of this change, you can pull it into the
"test" branch in preparation to make it public:

$ git checkout test && git resolve test speed-up-spinlocks "Pull speed-up-spinlock changes"
$ git checkout test && git merge "Pull speed-up-spinlock changes" test speed-up-spinlocks

It is unlikely that you would have any conflicts here ... but you might if you
spent a while on this step and had also pulled new versions from upstream.
Expand All @@ -138,7 +138,7 @@ same branch into the "release" tree ready to go upstream. This is where you
see the value of keeping each patch (or patch series) in its own branch. It
means that the patches can be moved into the "release" tree in any order.

$ git checkout release && git resolve release speed-up-spinlocks "Pull speed-up-spinlock changes"
$ git checkout release && git merge "Pull speed-up-spinlock changes" release speed-up-spinlocks

After a while, you will have a number of branches, and despite the
well chosen names you picked for each of them, you may forget what
Expand Down Expand Up @@ -190,7 +190,7 @@ Here are some of the scripts that I use to simplify all this even further.

case "$1" in
test|release)
git checkout $1 && git resolve $1 linus "Auto-update from upstream"
git checkout $1 && git merge "Auto-update from upstream" $1 linus
;;
linus)
before=$(cat .git/refs/heads/linus)
Expand Down Expand Up @@ -231,7 +231,7 @@ test|release)
echo $1 already merged into $2 1>&2
exit 1
fi
git checkout $2 && git resolve $2 $1 "Pull $1 into $2 branch"
git checkout $2 && git merge "Pull $1 into $2 branch" $2 $1
;;
*)
usage
Expand Down
9 changes: 6 additions & 3 deletions INSTALL
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@ Normally you can just do "make" followed by "make install", and that
will install the git programs in your own ~/bin/ directory. If you want
to do a global install, you can do

make prefix=/usr install
$ make prefix=/usr ;# as yourself
# make prefix=/usr install ;# as root

(or prefix=/usr/local, of course). Some day somebody may send me a RPM
spec file or something, and you can do "make rpm" or whatever.
(or prefix=/usr/local, of course). Just like any program suite
that uses $prefix, the built results have some paths encoded,
which are derived from $prefix, so "make all; make prefix=/usr
install" would not work.

Issues of note:

Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
# Define USE_STDEV below if you want git to care about the underlying device
# change being considered an inode change from the update-cache perspective.

GIT_VERSION = 0.99.9f
GIT_VERSION = 0.99.9g

# CFLAGS is for the users to override from the command line.

Expand Down
25 changes: 19 additions & 6 deletions apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ struct fragment {
struct patch {
char *new_name, *old_name, *def_name;
unsigned int old_mode, new_mode;
int is_rename, is_copy, is_new, is_delete;
int is_rename, is_copy, is_new, is_delete, is_binary;
int lines_added, lines_deleted;
int score;
struct fragment *fragments;
Expand Down Expand Up @@ -890,8 +890,18 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)

patchsize = parse_single_patch(buffer + offset + hdrsize, size - offset - hdrsize, patch);

if (!patchsize && !metadata_changes(patch))
die("patch with only garbage at line %d", linenr);
if (!patchsize && !metadata_changes(patch)) {
static const char binhdr[] = "Binary files ";

if (sizeof(binhdr) - 1 < size - offset - hdrsize &&
!memcmp(binhdr, buffer + hdrsize, sizeof(binhdr)-1))
patch->is_binary = 1;

if (patch->is_binary && !apply && !check)
;
else
die("patch with only garbage at line %d", linenr);
}

return offset + hdrsize + patchsize;
}
Expand Down Expand Up @@ -949,9 +959,12 @@ static void show_stats(struct patch *patch)
add = (add * max + max_change / 2) / max_change;
del = total - add;
}
printf(" %s%-*s |%5d %.*s%.*s\n", prefix,
len, name, patch->lines_added + patch->lines_deleted,
add, pluses, del, minuses);
if (patch->is_binary)
printf(" %s%-*s | Bin\n", prefix, len, name);
else
printf(" %s%-*s |%5d %.*s%.*s\n", prefix,
len, name, patch->lines_added + patch->lines_deleted,
add, pluses, del, minuses);
if (qname)
free(qname);
}
Expand Down
6 changes: 6 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
git-core (0.99.9g-0) unstable; urgency=low

* GIT 0.99.9g

-- Junio C Hamano <junkio@cox.net> Wed, 9 Nov 2005 21:01:55 -0800

git-core (0.99.9f-0) unstable; urgency=low

* GIT 0.99.9f
Expand Down
50 changes: 44 additions & 6 deletions git-core.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -19,32 +19,70 @@ distributed source code management system. This package includes
rudimentary tools that can be used as a SCM, but you should look
elsewhere for tools for ordinary humans layered on top of this.

%package svn
Summary: Git tools for importing Subversion repositories.
Group: Development/Tools
Requires: subversion
%description svn
Git tools for importing Subversion repositories.

%package cvs
Summary: Git tools for importing CVS repositories.
Group: Development/Tools
Requires: cvs
%description cvs
Git tools for importing CVS repositories.

%package email
Summary: Git tools for sending email.
Group: Development/Tools
%description email
Git tools for sending email.

%prep
%setup -q

%build
make %{_smp_mflags} CFLAGS="$RPM_OPT_FLAGS" WITH_OWN_SUBPROCESS_PY=YesPlease \
make %{_smp_mflags} CFLAGS="$RPM_OPT_FLAGS" WITH_OWN_SUBPROCESS_PY=YesPlease WITH_SEND_EMAIL=1 \
prefix=%{_prefix} all %{!?_without_docs: doc}

%install
rm -rf $RPM_BUILD_ROOT
make %{_smp_mflags} DESTDIR=$RPM_BUILD_ROOT WITH_OWN_SUBPROCESS_PY=YesPlease \
make %{_smp_mflags} DESTDIR=$RPM_BUILD_ROOT WITH_OWN_SUBPROCESS_PY=YesPlease WITH_SEND_EMAIL=1 \
prefix=%{_prefix} mandir=%{_mandir} \
install %{!?_without_docs: install-doc}

(find $RPM_BUILD_ROOT%{_bindir} -type f | grep -vE "svn|cvs|email" | sed -e s@^$RPM_BUILD_ROOT@@) > bin-man-files
%if %{!?_without_docs:1}0
(find $RPM_BUILD_ROOT%{_mandir} -type f | grep -vE "svn|cvs|email" | sed -e s@^$RPM_BUILD_ROOT@@ -e 's/$/*/' ) >> bin-man-files
%endif

%clean
rm -rf $RPM_BUILD_ROOT

%files
%files svn
%{_bindir}/*svn*
%{!?_without_docs: %{_mandir}/man1/*svn*.1*}

%files cvs
%{_bindir}/*cvs*
%{!?_without_docs: %{_mandir}/man1/*cvs*.1*}

%files email
%{_bindir}/*email*
%{!?_without_docs: %{_mandir}/man1/*email*.1*}

%files -f bin-man-files
%defattr(-,root,root)
%{_bindir}/*
%{_datadir}/git-core/
%doc README COPYING Documentation/*.txt
%{!?_without_docs: %doc Documentation/*.html }
%{!?_without_docs: %{_mandir}/man1/*.1*}
%{!?_without_docs: %{_mandir}/man7/*.7*}

%changelog
* Tue Sep 27 2005 Jim Radford <radford@blackbean.org>
- Move programs with non-standard dependencies (svn, cvs, email)
into separate packages

* Tue Sep 27 2005 H. Peter Anvin <hpa@zytor.com>
- parallelize build
- COPTS -> CFLAGS
Expand Down
2 changes: 1 addition & 1 deletion git-cvsexportcommit.perl
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
last;
}; # found it
die "Did not find $parent in the parents for this commit!";
s }
}
} else { # we don't have a parent from the cmdline...
if (@parents == 1) { # it's safe to get it from the commit
$parent = $parents[0];
Expand Down
13 changes: 5 additions & 8 deletions git-merge-recursive.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,13 +162,10 @@ def mergeTrees(head, merge, common, branch1Name, branch2Name):
# Low level file merging, update and removal
# ------------------------------------------

MERGE_NONE = 0
MERGE_TRIVIAL = 1
MERGE_3WAY = 2
def mergeFile(oPath, oSha, oMode, aPath, aSha, aMode, bPath, bSha, bMode,
branch1Name, branch2Name):

merge = MERGE_NONE
merge = False
clean = True

if stat.S_IFMT(aMode) != stat.S_IFMT(bMode):
Expand All @@ -181,7 +178,7 @@ def mergeFile(oPath, oSha, oMode, aPath, aSha, aMode, bPath, bSha, bMode,
sha = bSha
else:
if aSha != oSha and bSha != oSha:
merge = MERGE_TRIVIAL
merge = True

if aMode == oMode:
mode = bMode
Expand Down Expand Up @@ -211,7 +208,6 @@ def mergeFile(oPath, oSha, oMode, aPath, aSha, aMode, bPath, bSha, bMode,
os.unlink(src1)
os.unlink(src2)

merge = MERGE_3WAY
clean = (code == 0)
else:
assert(stat.S_ISLNK(aMode) and stat.S_ISLNK(bMode))
Expand Down Expand Up @@ -299,6 +295,7 @@ def fileExists(path):
else:
raise

branch = branch.replace('/', '_')
newPath = path + '_' + branch
suffix = 0
while newPath in currentFileSet or \
Expand Down Expand Up @@ -590,7 +587,7 @@ def processRenames(renamesA, renamesB, branchNameA, branchNameB):
if merge or not clean:
print 'Renaming', fmtRename(path, ren1.dstName)

if merge == MERGE_3WAY:
if merge:
print 'Auto-merging', ren1.dstName

if not clean:
Expand Down Expand Up @@ -668,7 +665,7 @@ def processRenames(renamesA, renamesB, branchNameA, branchNameB):
if merge or not clean:
print 'Renaming', fmtRename(ren1.srcName, ren1.dstName)

if merge == MERGE_3WAY:
if merge:
print 'Auto-merging', ren1.dstName

if not clean:
Expand Down
11 changes: 9 additions & 2 deletions git-merge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,14 @@ do
die "$remote - not something we can merge"
done

common=$(git-show-branch --merge-base $head "$@")
case "$#" in
1)
common=$(git-merge-base --all $head "$@")
;;
*)
common=$(git-show-branch --merge-base $head "$@")
;;
esac
echo "$head" >"$GIT_DIR/ORIG_HEAD"

case "$#,$common,$no_commit" in
Expand Down Expand Up @@ -162,7 +169,7 @@ case "$#,$common,$no_commit" in
up_to_date=t
for remote
do
common_one=$(git-merge-base $head $remote)
common_one=$(git-merge-base --all $head $remote)
if test "$common_one" != "$remote"
then
up_to_date=f
Expand Down
16 changes: 14 additions & 2 deletions git-pull.sh
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,22 @@ case "$merge_head" in
exit 0
;;
?*' '?*)
strategy_default_args='-s octopus'
var=`git-var -l | sed -ne 's/^pull\.octopus=/-s /p'`
if test '' = "$var"
then
strategy_default_args='-s octopus'
else
strategy_default_args=$var
fi
;;
*)
strategy_default_args='-s resolve'
var=`git-var -l | sed -ne 's/^pull\.twohead=/-s /p'`
if test '' = "$var"
then
strategy_default_args='-s recursive'
else
strategy_default_args=$var
fi
;;
esac

Expand Down
Loading

0 comments on commit 23ea3e2

Please sign in to comment.