git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH/RFC] Build a shared / renamed / "stable" version of the library?
@ 2005-09-16 12:37  7% Matthias Urlichs
  0 siblings, 0 replies; 4+ results
From: Matthias Urlichs @ 2005-09-16 12:37 UTC (permalink / raw)
  To: git

Build (and use) libgit.so instead of libgit.a.

--- 

I have written this nice Python extension that gives me fast access to
git objects. Python extensions are built as shared libraries. Linking
shared and non-shared objects into one library results in a couple of
linker warnings on i386; other architectures are far less forgiving.

So the best choice I seem to have is to build a shared libgit.so.

Unfortunately, libgit doesn't have nice symbol names. I dunno how you
all would feel about a big patch which renames absoutely every foo()
function in libgit to be git_foo() instead (or one that #ifdef's them)...
so I'm taking the easy way out, and use versioned symbols. That should
prevent symbol name conflicts with other libraries.

I've had to redefine usage(), error() and die() to git_*(), because
they're just too conflict-ish. "error" is even a weak symbol in libc. :-/

To summarize, the choices seem to be:
- don't do anything => no script language extensions, need to fork off
  a git program for absolutely everything. Bah.
- build libgit.a with -fpic'd objects => doesn't work on all
  architectures.
- build libgit.shared.a and use that for building script language
  extensions => works now, but may cause name conflicts down the road.
- build a "normal" libgit.so => ditto on the name conflicts.
- build a libgit.so with symbol versions => no name conflicts expected,
  but works only with the GNU linker.
- rename all library functions and globals => quite a bit of work,
  and more typing down the road.
- add "#define foo git_foo" to all library functions => ugly.

Opinions?

diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -47,6 +47,8 @@ ALL_CFLAGS = $(CFLAGS) $(PLATFORM_DEFINE
 
 prefix = $(HOME)
 bindir = $(prefix)/bin
+libdir = $(prefix)/lib
+incdir = $(prefix)/include
 template_dir = $(prefix)/share/git-core/templates/
 GIT_PYTHON_DIR = $(prefix)/share/git-core/python
 # DESTDIR=
@@ -142,7 +144,18 @@ LIB_OBJS = \
 	server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \
 	tag.o tree.o usage.o $(DIFF_OBJS)
 
-LIBS = $(LIB_FILE)
+ifdef SHARED_LIBOBJ
+
+LIB_FILE=libgit.so
+GITLIB = -L. -lgit
+
+else
+
+LIB_FILE=libgit.a
+GITLIB = $(LIB_FILE)
+
+endif
+
 LIBS += -lz
 
 ifeq ($(shell uname -s),Darwin)
@@ -167,6 +180,7 @@ endif
 ifndef NO_OPENSSL
 	LIB_OBJS += epoch.o
 	OPENSSL_LIBSSL = -lssl
+	LIBS += -lssl
 else
 	DEFINES += '-DNO_OPENSSL'
 	MOZILLA_SHA1 = 1
@@ -242,7 +256,7 @@ $(patsubst %.py,%,$(SCRIPT_PYTHON)) : % 
 	$(CC) -o $*.o -c $(ALL_CFLAGS) $<
 
 git-%: %.o $(LIB_FILE)
-	$(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(LIBS)
+	$(CC) $(ALL_CFLAGS) -o $@ $(filter %.o,$^) $(GITLIB) $(LIBS)
 
 git-mailinfo : SIMPLE_LIB += $(LIB_4_ICONV)
 $(SIMPLE_PROGRAMS) : $(LIB_FILE)
@@ -267,9 +281,33 @@ $(LIB_OBJS): $(LIB_H)
 $(patsubst git-%,%.o,$(PROGRAMS)): $(LIB_H)
 $(DIFF_OBJS): diffcore.h
 
+# Use -fPIC for the library files so they may be linked into a shared
+# library if necessary
+#
+ifdef SHARED_LIBOBJ
+
+PIC=-fpic
+
+$(LIB_FILE): $(LIB_OBJS) libgit.vers
+	$(CC) -shared -Wl,-soname,$(SHARED_LIBOBJ) -Wl,--version-script=libgit.vers -o $@ $(LIB_OBJS) $(LIBS)
+	rm -f $(SHARED_LIBOBJ) && ln -s $(LIB_FILE) $(SHARED_LIBOBJ)
+
+else # "normal" library
+
+PIC=
+
 $(LIB_FILE): $(LIB_OBJS)
 	$(AR) rcs $@ $(LIB_OBJS)
 
+endif
+
+# Declare rules for building library files.
+define lib_rule
+$1.o: $1.c
+	$(CC) $(ALL_CFLAGS) $(PIC) -c -o $1.o $1.c
+endef
+$(foreach obj,$(basename $(LIB_OBJS)),$(eval $(call lib_rule, $(obj))))
+
 doc:
 	$(MAKE) -C Documentation all
 
@@ -300,6 +338,14 @@ install: $(PROGRAMS) $(SCRIPTS)
 	$(MAKE) -C templates install
 	$(INSTALL) -d -m755 $(DESTDIR)$(GIT_PYTHON_DIR)
 	$(INSTALL) $(PYMODULES) $(DESTDIR)$(GIT_PYTHON_DIR)
+ifdef SHARED_LIBOBJ
+	$(INSTALL) -m755 -d $(DESTDIR)$(libdir)
+	$(INSTALL) -m755 $(LIB_FILE) $(DESTDIR)$(libdir)/$(SHARED_LIBOBJ)
+	cd $(DESTDIR)$(libdir) && ln -sf $(SHARED_LIBOBJ) $(LIB_FILE)
+	$(INSTALL) -m755 -d $(DESTDIR)$(incdir)
+	$(INSTALL) -m755 -d $(DESTDIR)$(incdir)/git
+	$(INSTALL) -m644 $(LIB_H) $(DESTDIR)$(incdir)/git
+endif
 
 install-doc:
 	$(MAKE) -C Documentation install
@@ -333,7 +379,7 @@ deb: dist
 ### Cleaning rules
 
 clean:
-	rm -f *.o mozilla-sha1/*.o ppc/*.o $(PROGRAMS) $(LIB_FILE)
+	rm -f *.o mozilla-sha1/*.o ppc/*.o $(PROGRAMS) *.a *.so *.so.*
 	rm -f $(filter-out gitk,$(SCRIPTS))
 	rm -f git-core.spec
 	rm -rf $(GIT_TARNAME)
diff --git a/cache.h b/cache.h
--- a/cache.h
+++ b/cache.h
@@ -228,6 +228,9 @@ extern int get_sha1_hex(const char *hex,
 extern char *sha1_to_hex(const unsigned char *sha1);	/* static buffer result! */
 
 /* General helper functions */
+#define usage git_usage
+#define error git_error
+#define die git_die
 extern void usage(const char *err) NORETURN;
 extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2)));
 extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+git-core (0.99.6-2) unstable; urgency=low
+
+  * Install a shared libgit.so
+  * Install development files (git-dev package)
+
+ -- Matthias Urlichs <smurf@debian.org>  Wed, 14 Sep 2005 09:04:57 +0200
+
 git-core (0.99.6-0) unstable; urgency=low
 
   * GIT 0.99.6
diff --git a/debian/control b/debian/control
--- a/debian/control
+++ b/debian/control
@@ -18,9 +18,22 @@ Description: The git content addressable
  enables human beings to work with the database in a manner to a degree
  similar to other SCM tools.
 
+Package: libgit1
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: The git content addressable filesystem, shared library
+ This package contains the shared library for git.
+
 Package: git-tk
 Architecture: all
 Depends: ${shlibs:Depends}, ${misc:Depends}, git-core, tk8.4
 Description: The git content addressable filesystem, GUI add-on
  This package contains 'gitk', the git revision tree visualizer.
 
+Package: git-dev
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, git-core, tk8.4
+Description: The git content addressable filesystem, development files
+ This package contains the files needed to build programs which access
+ the git library.
+
diff --git a/debian/git-core.files b/debian/git-core.files
--- a/debian/git-core.files
+++ b/debian/git-core.files
@@ -1 +1,3 @@
-/usr
+/usr/bin
+/usr/share
+/usr/lib/*.so.*
diff --git a/debian/git-dev.files b/debian/git-dev.files
new file mode 100644
--- /dev/null
+++ b/debian/git-dev.files
@@ -0,0 +1,2 @@
+/usr/include/git
+/usr/lib/*.so
diff --git a/debian/libgit1.files b/debian/libgit1.files
new file mode 100644
--- /dev/null
+++ b/debian/libgit1.files
@@ -0,0 +1 @@
+/usr/lib/libgit.so.1
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -25,6 +25,9 @@ else
 	export MOZILLA_SHA1=YesPlease
 endif
 
+# build libgit.a with shared objects
+export SHARED_LIBOBJ=libgit.so.1
+
 # We do have the requisite perl modules in the mainline, and
 # have no reason to shy away from this script.
 export WITH_SEND_EMAIL=YesPlease
@@ -60,11 +63,13 @@ install: build
 	dh_installdirs 
 
 	make DESTDIR=$(DESTDIR) prefix=$(PREFIX) mandir=$(MANDIR) \
-		install install-doc
+		install # install-doc
 
 	mkdir -p $(DOC_DESTDIR)
 	find $(DOC) '(' -name '*.txt' -o -name '*.html' ')' -exec install {} $(DOC_DESTDIR) ';'
 
+	dh_movefiles -p libgit1
+	dh_movefiles -p git-dev
 	dh_movefiles -p git-tk
 	dh_movefiles -p git-core
 	find debian/tmp -type d -o -print | sed -e 's/^/? /'
diff --git a/libgit.vers b/libgit.vers
new file mode 100644
--- /dev/null
+++ b/libgit.vers
@@ -0,0 +1,195 @@
+GIT_1 {
+	global:
+		add_cache_entry ;
+		add_packed_git ;
+		add_ref ;
+		alloc_filespec ;
+		base_name_compare ;
+		blob_type ;
+		cache_name_compare ;
+		cache_name_pos ;
+		ce_match_stat ;
+		ce_path_match ;
+		ce_same_name ;
+		checkout_entry ;
+		check_ref_format ;
+		check_sha1_signature ;
+		commit_index_file ;
+		commit_list_insert ;
+		commit_type ;
+		count_delta ;
+		count_parents ;
+		created_object ;
+		deref_tag ;
+		diff_addremove ;
+		diff_change ;
+		diffcore_break ;
+		diffcore_merge_broken ;
+		diffcore_order ;
+		diffcore_pathspec ;
+		diffcore_pickaxe ;
+		diffcore_rename ;
+		diffcore_std ;
+		diffcore_std_no_resolve ;
+		diff_delta ;
+		diff_flush ;
+		diff_free_filepair ;
+		diff_free_filespec ;
+		diff_helper_input ;
+		diff_populate_filespec ;
+		diff_q ;
+		diff_queue ;
+		diff_queue_is_empty ;
+		diff_scoreopt_parse ;
+		diff_setup ;
+		diff_unmerge ;
+		diff_unmodified_pair ;
+		fill_filespec ;
+		fill_stat_cache_info ;
+		find_pack_entry_one ;
+		find_rev_cache ;
+		find_sha1_pack ;
+		finish_connect ;
+		for_each_ref ;
+		free_commit_list ;
+		get_ack ;
+		get_commit_format ;
+		get_graft_file ;
+		get_ident ;
+		get_index_file ;
+		get_object_directory ;
+		get_pathspec ;
+		get_refs_directory ;
+		get_ref_sha1 ;
+		get_remote_heads ;
+		get_sha1 ;
+		get_sha1_hex ;
+		git_author_info ;
+		git_committer_info ;
+		git_connect ;
+		git_mkstemp ;
+		git_path ;
+		has_pack_file ;
+		has_pack_index ;
+		has_sha1_file ;
+		has_sha1_pack ;
+		head_ref ;
+		hold_index_file_for_update ;
+		index_fd ;
+		insert_by_date ;
+		install_packed_git ;
+		lock_ref_sha1 ;
+		lookup_blob ;
+		lookup_commit ;
+		lookup_commit_reference ;
+		lookup_commit_reference_gently ;
+		lookup_object ;
+		lookup_object_type ;
+		lookup_tag ;
+		lookup_tree ;
+		lookup_unknown_object ;
+		mark_reachable ;
+		match_refs ;
+		mkpath ;
+		nth_packed_object_sha1 ;
+		num_packed_objects ;
+		object_list_append ;
+		object_list_contains ;
+		object_list_insert ;
+		object_list_length ;
+		packed_object_info_detail ;
+		packet_flush ;
+		packet_read_line ;
+		packet_write ;
+		parse_blob ;
+		parse_blob_buffer ;
+		parse_commit ;
+		parse_commit_buffer ;
+		parse_date ;
+		parse_object ;
+		parse_pack_index ;
+		parse_pack_index_file ;
+		parse_sha1_header ;
+		parse_tag ;
+		parse_tag_buffer ;
+		parse_tree ;
+		parse_tree_buffer ;
+		parse_tree_indirect ;
+		patch_delta ;
+		path_match ;
+		pop_commit ;
+		pop_most_recent_commit ;
+		prefix_path ;
+		prepare_alt_odb ;
+		prepare_packed_git ;
+		pretty_print_commit ;
+		read_cache ;
+		read_line ;
+		read_object_with_reference ;
+		read_rev_cache ;
+		read_sha1_file ;
+		read_tree ;
+		record_rev_cache ;
+		remove_cache_entry_at ;
+		remove_file_from_cache ;
+		rollback_index_file ;
+		run_command ;
+		run_command_v ;
+		safe_create_leading_directories ;
+		safe_strncpy ;
+		setup_git_directory ;
+		setup_ident ;
+		sha1close ;
+		sha1create ;
+		sha1fd ;
+		sha1_file_name ;
+		SHA1_Final ;
+		SHA1_Init ;
+		sha1_object_info ;
+		sha1_pack_index_name ;
+		sha1_pack_name ;
+		sha1_to_hex ;
+		SHA1_Update ;
+		sha1write ;
+		sha1write_compressed ;
+		show_date ;
+		sort_by_date ;
+		sort_in_topological_order ;
+		sort_list_in_merge_order ;
+		sq_quote ;
+		strbuf_init ;
+		tag_type ;
+		tree_type ;
+		unpack_entry_gently ;
+		unpack_sha1_file ;
+		unpack_sha1_header ;
+		unuse_packed_git ;
+		update_server_info ;
+		use_packed_git ;
+		verify_pack ;
+		write_cache ;
+		write_ref_sha1 ;
+		write_ref_sha1_unlocked ;
+		write_rev_cache ;
+		write_sha1_file ;
+		write_sha1_file_prepare ;
+		write_sha1_from_fd ;
+		write_sha1_to_fd ;
+		active_alloc ;
+		active_cache ;
+		active_cache_changed ;
+		active_nr ;
+		nr_objs ;
+		objs ;
+		alloc_revs ;
+		nr_revs ;
+		rev_cache ;
+		alt_odb_list ;
+		packed_git ;
+		diff_queued_diff ;
+		git_die ;
+		git_usage ;
+		git_error ;
+	local:
+		*;
+};
diff --git a/t/Makefile b/t/Makefile
--- a/t/Makefile
+++ b/t/Makefile
@@ -8,7 +8,9 @@
 T = $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)
 
 all:
-	@$(foreach t,$T,echo "*** $t ***"; sh $t $(GIT_TEST_OPTS) || exit; )
+	@$(foreach t,$T,echo "*** $t ***"; \
+	env LD_LIBRARY_PATH=$$(pwd)/..:$$LD_LIBRARY_PATH \
+	sh $t $(GIT_TEST_OPTS) || exit; )
 	@rm -fr trash
 
 clean:
-- 
Matthias Urlichs   |   {M:U} IT Design @ m-u-it.de   |  smurf@smurf.noris.de
Disclaimer: The quote was selected randomly. Really. | http://smurf.noris.de
 - -
Don't send my boy to Harvard, the dying mother said. Don't send my boy to
Harvard, I'd rather see him dead.

^ permalink raw reply	[relevance 7%]

* Re: Unified merge driver pushed out to "master" branch
  2005-09-11  2:54  3%   ` Unified merge driver pushed out to "master" branch Junio C Hamano
@ 2005-09-11 21:05  0%     ` Fredrik Kuivinen
  0 siblings, 0 replies; 4+ results
From: Fredrik Kuivinen @ 2005-09-11 21:05 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Fredrik Kuivinen, git, Daniel Barkalow

On Sat, Sep 10, 2005 at 07:54:19PM -0700, Junio C Hamano wrote:
> I've pushed out the 'git merge' along with Daniel's read-tree
> updates and your 'base on merge of bases' merge strategy driver
> in the "master" branch.
> 
> The last one is what I butchered your code without really
> auditing the changes I made, so I'd appreciate you to take a
> look at it and supply any necessary updates and fixes.  My
> changes are meant to be only to adjust the calling convention to
> that of 'git merge' -- that is, it gets merge bases and heads
> from the command line, and it is not supposed to commit and
> update HEAD itself, but is supposed to leave its best effort in
> the working tree and the paths that cannot be automerged should
> be left as that of HEAD version in the index file, so that the
> user can run 'git diff' to see what is happening while resolving
> things by hand.  I do not think my change did the last part
> correctlyx.  The change to introduce '-i' option to read-tree is
> also present.

Your changes seems to be fine.

I am a bit confused about in what state the index should be in after a
non-clean merge.

I interpreted <7vmzn2prck.fsf@assigned-by-dhcp.cox.net> as follows:

The index should preferably contain unmerged entries after a merge if
the merge was non-clean. If, for example, the file 'a' is modified in
branch A and 'a' is also modified in branch 'B' in such a way that
merge(1) cannot merge those changes, then when we have merged A with B
git-ls-files --unmerged should list 'a' in its output.

However, according to my tests 'git merge -s resolve' doesn't do
this. (the old git-resolve-script didn't do this either) They both
update the unmerged index entries to the entries that was in HEAD,
which agrees with your description of how things are supposed to work
above.

The way the 'resolve' strategy do this seems to be more usable than
"leave unmerged entries in the cache". In particular, 'git diff' gives
a usable output in this case.

Should I change git-merge-fredrik.py to have the same behaviour as the
resolve strategy?

> I primarily used the commits found in the Linux 2.6 repository
> and its derivatives that have multiple potential merge bases for
> my testing.  Among them, the attempt to merge parents of this
> commit triggered an assertion failure -- it may be my fault but
> I have not spent much time to diagnose it.
> 
> commit 6358924b06cd1aaa031b8ba0c33e5a15e795bef0
> Merge: 1da21e73bdc458f8131e6071072632b4c3b0430f 344a076110f4ecb16ea6d286b63be696604982ed
> Author: Tony Luck <tony.luck@intel.com>
> Date:   Thu Sep 8 14:29:32 2005 -0700
> 
>     Pull release into test branch
> 

It was not your fault. I have a fix for it in my local tree, it will
be sent to the mailing list soon. The result match the actual commit
when this patch has been applied.


> ----------------------------------------------------------------
> Here is a summary of my test results.
> 
> "Expect" names the commit being tested.  The parents of each of
> these commits have more than one merge-base, and the test is to
> start from one parent of it, and merge the other parent into it
> using the four merge programs:
> 
>  * traditional is 'git-resolve-script' from GIT 0.99.6 (it does
>    not even use Daniel's read-tree so that I can catch
>    regression in read-tree).
> 
>  * dbrt is 'git-merge -s resolve', i.e. Daniel's multi-base merge.
> 
>  * stupid is 'git-merge -s stupid', supposed to be the same
>    as 'git-resolve' (but internally uses Daniel's read-tree with
>    only one merge base).
> 
>  * fredrik is 'git-merge -s fredrik', the one I butchered.
> 
> ------------------------------------------------
> Expect 0c168775709faa74c1b87f1e61046e0c51ade7f3
> Method 'traditional' failed to automerge.
> Method 'dbrt' failed to automerge.
> Method 'stupid' failed to automerge.
> Method 'fredrik' automerged
> Method 'fredrik' resolved cleanly.
> 
> The fredrik is the only one that merged successfully, but its
> result is different from the actual commit.
> 
> :100644 100644 065b702df56353a00d5f460cf385f172decccf2b cd4222ff8b925f6b92414d58729d225fccc3f310 M	include/net/ieee80211.h
> 

I believe my algorithm produces the correct result in this case. I
think the difference comes from manual edits to
include/net/ieee80211.h after the merge but before the commit.

This commit was mentioned in
<20050908200559.GA26088@c165.ib.student.liu.se>.


> ------------------------------------------------
> Expect 0c3e091838f02c537ccab3b6e8180091080f7df2 (case #16)
> Method 'traditional' automerged
> Method 'traditional' resolved cleanly.
> Method 'dbrt' failed to automerge.
> Method 'stupid' automerged
> Method 'stupid' resolved cleanly.
> Method 'fredrik' automerged
> Method 'fredrik' resolved cleanly.
> 
> The fredrik result is different from the actual commit.
> 
> :100644 100644 a7bed60b69f9e8de9a49944e22d03fb388ae93c7 51a7b7b4dd0e7c5720683a40637cdb79a31ec4c4 M	arch/ia64/hp/sim/boot/bootloader.c
> 

This is Tony Luck's test case, originally described in
<200508232256.j7NMuR1q027892@agluck-lia64.sc.intel.com>.

I reported the results for my algorithm on this case in
<20050826184731.GA13629@c165.ib.student.liu.se>. I think that the
result produced by my algorithm is the result which Tony expected to
get.


- Fredrik

^ permalink raw reply	[relevance 0%]

* Unified merge driver pushed out to "master" branch
  @ 2005-09-11  2:54  3%   ` Junio C Hamano
  2005-09-11 21:05  0%     ` Fredrik Kuivinen
  0 siblings, 1 reply; 4+ results
From: Junio C Hamano @ 2005-09-11  2:54 UTC (permalink / raw)
  To: Fredrik Kuivinen; +Cc: git, Daniel Barkalow

I've pushed out the 'git merge' along with Daniel's read-tree
updates and your 'base on merge of bases' merge strategy driver
in the "master" branch.

The last one is what I butchered your code without really
auditing the changes I made, so I'd appreciate you to take a
look at it and supply any necessary updates and fixes.  My
changes are meant to be only to adjust the calling convention to
that of 'git merge' -- that is, it gets merge bases and heads
from the command line, and it is not supposed to commit and
update HEAD itself, but is supposed to leave its best effort in
the working tree and the paths that cannot be automerged should
be left as that of HEAD version in the index file, so that the
user can run 'git diff' to see what is happening while resolving
things by hand.  I do not think my change did the last part
correctlyx.  The change to introduce '-i' option to read-tree is
also present.

I primarily used the commits found in the Linux 2.6 repository
and its derivatives that have multiple potential merge bases for
my testing.  Among them, the attempt to merge parents of this
commit triggered an assertion failure -- it may be my fault but
I have not spent much time to diagnose it.

commit 6358924b06cd1aaa031b8ba0c33e5a15e795bef0
Merge: 1da21e73bdc458f8131e6071072632b4c3b0430f 344a076110f4ecb16ea6d286b63be696604982ed
Author: Tony Luck <tony.luck@intel.com>
Date:   Thu Sep 8 14:29:32 2005 -0700

    Pull release into test branch

----------------------------------------------------------------
Here is a summary of my test results.

"Expect" names the commit being tested.  The parents of each of
these commits have more than one merge-base, and the test is to
start from one parent of it, and merge the other parent into it
using the four merge programs:

 * traditional is 'git-resolve-script' from GIT 0.99.6 (it does
   not even use Daniel's read-tree so that I can catch
   regression in read-tree).

 * dbrt is 'git-merge -s resolve', i.e. Daniel's multi-base merge.

 * stupid is 'git-merge -s stupid', supposed to be the same
   as 'git-resolve' (but internally uses Daniel's read-tree with
   only one merge base).

 * fredrik is 'git-merge -s fredrik', the one I butchered.

------------------------------------------------
Expect 0c168775709faa74c1b87f1e61046e0c51ade7f3
Method 'traditional' failed to automerge.
Method 'dbrt' failed to automerge.
Method 'stupid' failed to automerge.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

The fredrik is the only one that merged successfully, but its
result is different from the actual commit.

:100644 100644 065b702df56353a00d5f460cf385f172decccf2b cd4222ff8b925f6b92414d58729d225fccc3f310 M	include/net/ieee80211.h

------------------------------------------------
Expect 0c3e091838f02c537ccab3b6e8180091080f7df2 (case #16)
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' failed to automerge.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

The fredrik result is different from the actual commit.

:100644 100644 a7bed60b69f9e8de9a49944e22d03fb388ae93c7 51a7b7b4dd0e7c5720683a40637cdb79a31ec4c4 M	arch/ia64/hp/sim/boot/bootloader.c

------------------------------------------------
Expect 0e396ee43e445cb7c215a98da4e76d0ce354d9d7
Method 'traditional' failed to automerge.
Method 'dbrt' failed to automerge.
Method 'stupid' failed to automerge.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

The fredrik is the only one that merged successfully, and its
result matches the actual commit.

------------------------------------------------
Expect 1960ff70a6c1db8e5f8fa9ec7020ef585f8ce706
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

All results match the actual commit.

------------------------------------------------
Expect 19925d7e0af7de645d808fd973ef99049fce52f0
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

All results match the actual commit.

------------------------------------------------
Expect 3190186362466658f01b2e354e639378ce07e1a9
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

All results match the actual commit.

------------------------------------------------
Expect 467ca22d3371f132ee225a5591a1ed0cd518cb3d
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

All results match the actual commit.

------------------------------------------------
Expect 539aeb871b52233b189ae976dfded20e14db645a
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

All results match the actual commit.

------------------------------------------------
Expect 6358924b06cd1aaa031b8ba0c33e5a15e795bef0
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' failed to automerge.

Fredrik dies on asserttion failure.

------------------------------------------------
Expect 84ffa747520edd4556b136bdfc9df9eb1673ce12 (case #16)
Method 'traditional' failed to automerge.
Method 'dbrt' failed to automerge.
Method 'stupid' failed to automerge.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

The fredrik result matches the actual commit.

------------------------------------------------
Expect a855f9a4d29f0ec338c337358844389171b0bae0
Method 'traditional' failed to automerge.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' failed to automerge.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

Both fredrik and dbrt results match the actual commit.

------------------------------------------------
Expect cf70be167c085af820c0c2a606cab8c3ee819dc6
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

All results match the actual commit.

------------------------------------------------
Expect da28c12089dfcfb8695b6b555cdb8e03dda2b690
Method 'traditional' automerged
Method 'traditional' resolved cleanly.
Method 'dbrt' automerged
Method 'dbrt' resolved cleanly.
Method 'stupid' automerged
Method 'stupid' resolved cleanly.
Method 'fredrik' automerged
Method 'fredrik' resolved cleanly.

All results match the actual commit.

------------------------------------------------

^ permalink raw reply	[relevance 3%]

* GIT 0.99.6
@ 2005-09-08  0:08  3% Junio C Hamano
  0 siblings, 0 replies; 4+ results
From: Junio C Hamano @ 2005-09-08  0:08 UTC (permalink / raw)
  To: git

Highlights
==========

* Documentation is in much better shape.  Thanks everybody.

* Two grave bugs in 'git fetch' were caught and fixed.  One is "Fix
  fetching of tags", the other is "Fix pulling into the same branch.".

* We have archimport (unfortunately undocumented yet), and
  cvsimport is being improved.

* Revert, rebase and cherry-pick are done using three-way merge,
  not a straight patch application.

* 'git commit' should be a bit easier to use than before in
  initial commits and merge commits.

* 'git applymbox' is a bit more accomodating and it should be
  easier to handle MIME patches than before.

* As usual, comes with more recent gitk.

Better merge algorithms and the infrastructure are being worked
on by Daniel and Fredrik; they are not in this release yet.


What to expect after 0.99.6
===========================

This is written in a form of to-do list for me, so if I say
"accept patch", it means I do not currently plan to do that
myself.  People interested in seeing it materialize please take
a hint.  The latest copy of this document is found at 

    http://kernel.org/git/?p=git/git.git;a=blob;hb=todo;f=TODO

Tool Renames Plan
-----------------

 - All non-binary commands will lose -script suffix in
   $(bindir).  The source to git-foo will be either git-foo.sh
   or git-foo.perl in the source tree, and the documentation
   will be in Documentation/git-foo.txt.

 - The commands whose names have 'cache' to mean 'index file'
   will get 'cache' in their names replaced with 'index'. For
   git-fsck-cache and git-convert-cache, 'cache' will be
   replaced with 'objects'.

 - The commit walkers will have 'pull' in their names replaced
   with 'fetch'.  'git-ssh-push' will become 'git-ssh-upload'.

 - We continue to follow the convention to name the C source
   file that contains the main program of 'git-foo' command
   'foo.c'.  That means we will have 'fsck-objects.c', for
   example.

 - At this moment, I am not planning to rename the symbols used
   in programs, nor any library sources.  "cache.h" will stay
   "cache.h", so does "read-cache.c".  "struct cache_entry"  and
   "ce_match_stat()" will keep their names.  We _might_ want to
   rename them in later rounds but not right now.

 - In 0.99.7, all renamed commands will have symbolic links in
   $(bindir) so that old names continue to work.  These backward
   compatible symlinks will not be present in documentation,
   though.  Especially, the main documentation, git(7) will talk
   about the new names.  Old environment names defined in
   gitenv() will also be removed in this release.

   Tentatively we aim to do this on Sep 17th.

 - In 0.99.8, we do not install these backward compatible
   symbolic links in $(bindir) anymore.  The Makefile will have
   a target to remove old symlinks from $(DESTDIR)$(bindir) you
   can run manually to help you clean things up.

   The timeframe for this is around Oct 1st, but I could be
   talked into delaying the symlink removal if Porcelain people
   find this schedule too tight.


Documentation
-------------

* Accept patches from people who actually have done CVS
  migration and update the cvs-migration documentation.
  Link the documentation from the main git.txt page.

* Accept patches from people who were hit by shiny blue bat to
  update the SubmittingPatches [ONGOING].

* Talk about using rsync just once at the beginning when
  initializing a remote repository so that local packs do not
  need to be expanded.  I personally do not think we need tool
  support for this (but see below about optimized cloning).

* Maybe update tutorial with a toy project that involves two or
  three developers..

* Update tutorial to cover setting up repository hooks to do
  common tasks.

* Accept patches to finish missing docs.


Technical (heavier)
-------------------

* Tony Luck reported an unfortunate glitch in the 3-way merge.
  Encourage discussions to come up with a not-so-expensive way
  to catch the kind of ambiguities that led to his misery.
  [Daniel's patch looks quite promising, so is the one from
  Fredrik.]

* HPA has two projects, klibc and klibc-kbuild, that have large
  set of overlapping files in different paths (i.e. one has many
  renames from the other).  There currently is no way for git to
  help keep these two trees in sync, merging criss-cross between
  them.  The merge logic should be able to take advantage of
  rename/copy detection smarts git-diff-* family has.  Linus,
  me, and Daniel outlined a smarter merge strategy for this.
  Try them out.

* To make it easier to experiment with different merge
  strategies, make git-merge driver that will run merge backends
  for the best merge [Outlined the idea; just do it].

* We might want to optimize cloning with GIT native transport
  not to explode the pack, and store it in objects/pack instead.
  We would need a tool to generate an idx file out of a pack
  file for this.  Also this itself may turn out to be a bad
  idea, making the set of packs in repositories everybody has
  different from each other.

* Maybe a pack optimizer.  I am not convinced that packing all
  objects into a single pack and removing all the existing panck
  is the right way to go, since that would work against people
  who already have those packs.

* Maybe an Emacs VC backend.


Technical (milder)
------------------

* Tool renames [STARTED].

* Have Daniel's read-tree graduate from "pu" after plugging leaks.

* Implement a merge backend using Daniel's read-tree.

* Accept Fredrik merge after renaming it (I want to name the
  driver 'git merge').  Suggest where to place *.py stuff --
  probably in $(share)/git-core/ and add Makefile entry for
  installation.

* Encourage concrete proposals to commit log message templates
  we discussed some time ago.

* Bug Martin for archimport script documentation.

* More portability.  I dropped a SunOS patch on the floor by
  somebody.

* Accept patches to cause "read-tree -u" delete a directory when
  it makes it empty.

* Perhaps accept patches to introduce the concept of "patch flow
  expressed as ref mappings" Josef has been advocating about.

* Perhaps accept patches to do undo/redo.

* Maybe grok PGP signed text/plain in applymbox as well.

* Perhaps a tool to revert a single file to pre-modification
  state?  git-cat-file blob `git-ls-files | grep foo` >foo or
  git-cat-file blob `git-ls-tree HEAD foo` >foo?  What should
  the command be called?  git-revert is taken so is
  git-checkout.

* A tool to detect, show and prune already merged topic
  branches.

* Enhance "git repack" to not always use --all; this would be
  handy if the repository contains wagging heads like "pu" in
  git.git repository.

* Internally split the project into non-doc and doc parts; add
  an extra root for the doc part and merge from it; move the
  internal doc source to a separate repository, like the +Meta
  repository; experiment if this results in a reasonable
  workflow, and document it in howto form if it does.

* Option to limit rename detection for more than N paths.


Technical (trivial)
-------------------

* Perhaps "git branch -d" to delete a branch.

* We would want test scripts for the relative directory path
  stuff Linus has been working on.  So far, the following
  commands should be usable with relative directory paths:

    update-cache
    ls-files
    diff-files
    diff-cache
    diff-tree
    rev-list
    rev-parse

* In a freashly created empty repository, `git fetch foo:bar`
  works OK, but `git checkout bar` afterwards does not (missing
  `.git/HEAD`).

^ permalink raw reply	[relevance 3%]

Results 1-4 of 4 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2005-09-07 16:47     [PATCH 0/2] A new merge algorithm, take 3 Fredrik Kuivinen
2005-09-07 16:50     ` [PATCH 1/2] Add '-i' flag to read-tree to make it ignore whats in the working directory Fredrik Kuivinen
2005-09-11  2:54  3%   ` Unified merge driver pushed out to "master" branch Junio C Hamano
2005-09-11 21:05  0%     ` Fredrik Kuivinen
2005-09-08  0:08  3% GIT 0.99.6 Junio C Hamano
2005-09-16 12:37  7% [PATCH/RFC] Build a shared / renamed / "stable" version of the library? Matthias Urlichs

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).