Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-08 Thread Chris Packham
Hi,

On 06/05/14 11:50, Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:
 
 On Tue, Apr 29, 2014 at 03:38:07PM -0700, Junio C Hamano wrote:
 * fc/remote-helpers-hg-bzr-graduation (2014-04-29) 11 commits
  ...
  Move remote-hg and remote-bzr out of contrib/.  There were some
  suggestions on the follow-up fix patches still not in 'next', which
  may result in a reroll.

  Will merge to 'next' and keep it there for the remainder of the
  cycle.

 I'd like to register my opposition to moving git-remote-{bzr,hg} out of
 contrib/.
 ...
 In the case of git-remote-hg specifically, the remote helper has to use
 an interface that the Mercurial developers consider unstable [1];...
 I do not want to end up in a situation where an update to Git is blocked
 by a distribution because git-remote-hg is not updated to support newer
 versions of Mercurial sufficiently quickly; this previously happened in
 Gentoo due to git-svn and meant that was stuck on 1.7.8 until 1.7.13 was
 released [2].
 
 The same argument would apply to git-svn, git-p4, and git-cvsimport,
 I would think.

A bit of a crazy suggestion and a little off-topic. Assuming maintainers
can be found what about having these foreign vcs interfaces as
submodules. That way they can be in Junio's tree as well as having their
own release cycles. The same could apply to git-gui, gitk and gitweb. It
would also be a chance to eat-our-own-dogfood with submodules.

 Among these, I am not sure if we can find willing maintainers who
 can give enough love to them.  But unlike these other importers,
 remote-hg and remote-bzr do have an active maintainer (and IIRC I
 think I heard that Hg one even has an active competitor or two?) so
 I am reasonably confident that these can live on their own merit
 outside of my tree.  In the ideal world, I would think it may be
 even beneficial to the end users of these helpers to unbundle them.
 
 You raised a good point on the issue of external dependencies may
 impact Git as a whole, even for those who are not interested in the
 particular remote helpers at all.  I'll have to think about it.
 
 The silly thing is that I totally forgot that we almost got
 ourselves into a very similar situation on cvsimport when a series
 wanted to make it cvsps3-only.  It is very possible nobody would
 have picked up the entire new release, if we merged that change.
 
 Having said all that, there is one caveat.
 
 Since the remote helper interface is stable and the remote helpers do
 not use any of the Git internals, I consider the risks of including them
 in core Git to outweigh the benefits of wider distribution.
 
 You are correct to say that a remote helper has to talk with a
 foreign system and it would not help to dictate the update schedule
 of helpers to match the release cycle of Git itself.  At the same
 time, however, the interface the remote helpers use to talk to Git
 has not been as stable as you seem to think, I am afraid.  For
 example, a recent remote-hg/bzr series needed some enhancements to
 fast-import to achieve the feature parity with native transports by
 adding a missing feature or two on the Git side.
 
 So in reality, a helper has to talk with two sides, needs to adjust
 to changes in the both sides, and both sides are changing.
 
 Unbundling a helper from Git would place more burden on the helper's
 maintainer, because the helper has to know enough about versions and
 features of both sides (the foreign system and Git) to adjust its
 behaviour, to stay compatible with wider versions of both foreign
 systems and Git.  Unbundling, when done properly, may give more
 ideal user experience to the end users, because such a helper would
 allow them to pick up the latest (or stay on an older but known to
 be stable) version of the helper and expect it to work with the
 foreign system and Git they happen to have.
 
 It however would be easier to maintain if the helper maintainer
 knows a change to Git itself will be released at the same time as
 the new version of the helper that takes advantage of the modified
 Git.  The helper maintainer only has to worry about compatibility
 with the foreign side if it is bundled with Git.
 
 So it boils down to how much resource are there to make sure a
 helper will stay compatible with wider versions of both sides? and
 how far backwards are helper maintainers willing to bend to support
 users better?.
 
 
 
 --
 To unsubscribe from this list: send the line unsubscribe git in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-08 Thread Felipe Contreras
Chris Packham wrote:
 On 06/05/14 11:50, Junio C Hamano wrote:
  The same argument would apply to git-svn, git-p4, and git-cvsimport,
  I would think.
 
 A bit of a crazy suggestion and a little off-topic. Assuming maintainers
 can be found what about having these foreign vcs interfaces as
 submodules. That way they can be in Junio's tree as well as having their
 own release cycles. The same could apply to git-gui, gitk and gitweb. It
 would also be a chance to eat-our-own-dogfood with submodules.

If submodules were an integral part of Git that would be a possibility,
but they are more like a hack.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-08 Thread Junio C Hamano
Chris Packham judge.pack...@gmail.com writes:

 A bit of a crazy suggestion and a little off-topic. Assuming maintainers
 can be found what about having these foreign vcs interfaces as
 submodules. That way they can be in Junio's tree as well as having their
 own release cycles. The same could apply to git-gui, gitk and gitweb. It
 would also be a chance to eat-our-own-dogfood with submodules.

While I agree that submodules may be useful for git-gui and gitk
(which already have their own repository and history), I do not
think that affects the issue of release cycles for third-party tools,
especially the ones with heavier foreign system dependencies like
vcs interfaces.

The release schedule of Git itself places a lot of stress not to
regress anything for existing users of Git, and the gitlink that
points at the specific commit in a submodule will stop advancing in
the top-level superproject (i.e. my tree) during the feature-freeze
period before releases, just like any other paths (i.e. regular file
blobs).

A third-party product maintainer may have other ideas about
stability of their product.  They may want to issue an unproven new
release to adjust to a recent update made to their external
dependencies as soon as code is written, relying on their ability to
issue follow-up maintenance updates on their product in quick
succession.  If many of them are bundled with Git, then we would
have to keep following these oops, that was wrong updates from all
of these, which would add unscalable burden to a single choking
point.

Not bundling gives third-party tools the freedom to evolve and worry
about compatibility with their dependencies on their own, and allows
them to treat Git as just one of the dependencies at the same level
as their other dependencies.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-08 Thread David Lang

On Thu, 8 May 2014, Felipe Contreras wrote:


Chris Packham wrote:

On 06/05/14 11:50, Junio C Hamano wrote:

The same argument would apply to git-svn, git-p4, and git-cvsimport,
I would think.


A bit of a crazy suggestion and a little off-topic. Assuming maintainers
can be found what about having these foreign vcs interfaces as
submodules. That way they can be in Junio's tree as well as having their
own release cycles. The same could apply to git-gui, gitk and gitweb. It
would also be a chance to eat-our-own-dogfood with submodules.


If submodules were an integral part of Git that would be a possibility,
but they are more like a hack.


Well, if git.git can't use them, then how can anyone else be expected to.

I haven't been paying close attention for a while, what would have to be done to 
make submodules an integral part of Git?


David Lang
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Submodule improvements (Re: What's cooking in git.git (Apr 2014, #09; Tue, 29))

2014-05-08 Thread Jonathan Nieder
Hi,

David Lang wrote:

 I haven't been paying close attention for a while, what would have
 to be done to make submodules an integral part of Git?

The series at
http://thread.gmane.org/gmane.comp.version-control.git/241455 is a
start.  I'm hoping to get a reroll done soon and then I can talk about
later steps.

https://github.com/jlehmann/git-submod-enhancements/wiki has a rough
roadmap, but really there's lots of commands that could be improved to
recurse into submodules and not many interdependencies involved so
anyone can bite off a chunk.

Thanks,
Jonathan
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-08 Thread Felipe Contreras
David Lang wrote:
 On Thu, 8 May 2014, Felipe Contreras wrote:
  If submodules were an integral part of Git that would be a possibility,
  but they are more like a hack.
 
 Well, if git.git can't use them, then how can anyone else be expected to.

That is a very good question.

 I haven't been paying close attention for a while, what would have to be done 
 to 
 make submodules an integral part of Git?

This comes to mind:

http://article.gmane.org/gmane.comp.version-control.git/220047

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread John Keeping
On Tue, May 06, 2014 at 05:01:59PM -0700, Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:
 
  I'd like to register my opposition to moving git-remote-{bzr,hg} out of
  contrib/.
 
  I am not convinced that tools for interoperating with other VCSs need to
  be part of core Git; as Junio has pointed out previously, while contrib/
  was necessary ... Associated tools can
  therefore live on their own and do not need to be promoted as part of
  Git itself (as git-imerge is doing successfully).
 
 Another thing to keep in mind is that we need to ensure that we give
 a good way for these third-party tools to integrate well with the
 core Git tools to form a single toolchest for the users.  I would
 love to be able to do
 
 $ (cd git.git  make install)
 $ (cd git-imerge.git  make install)
 
 and then say git imerge, git --help imerge, etc.  The same for
 the remote helpers that we may be splitting out of my tree into
 their own stand-alone projects.

This can already work given suitable installation.  With
git-integration[1] I can type `git help integration` and it shows me the
man page in the same way that `git help commit` does.  When I manually
linked the HTML file to the right place `git help -w integration` worked
as well.

 I _think_ it probably is OK for git-imerge.git/Makefile to peek into
 our Makefile, e.g.
 
 $ cd git-imerge.git
 $ make GIT_SOURCE_DIR=../git.git install
 
 to learn where imerge should install its subcommand implementation
 and documentation.  It might even want to borrow the test framework
 by using $GIT_SOURCE_DIR/t/test-lib.sh or somesuch.  There may be
 some changes the third-party tool authors would want to have in our
 Makefile to help them better when building their tools this way; I
 dunno.
 
 I also think that there should be a way to make it really easy to
 install these third-party tools to augment the installed version of
 Git without having the source tree of Git.  We have ways for them to
 ask us where things are expected to be, e.g.
 
 $ git --html-path
 $ git --man-path
 $ git --exec-path
 
 but I am not sure if these are enough, or if it would help them to
 add a bit more, then what these a bit more are.

I think this is enough - now I need to go and make git-integration's
Makefile use them by default rather than just using the same defaults as
git.git.

Perhaps it would be useful to have a skeleton external Git utility
project under contrib/ which could demonstrate best practice for
installing utilties that augment Git.

[1] http://johnkeeping.github.io/git-integration/
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Felipe Contreras
John Keeping wrote:
  I also think that there should be a way to make it really easy to
  install these third-party tools to augment the installed version of
  Git without having the source tree of Git.  We have ways for them to
  ask us where things are expected to be, e.g.
  
  $ git --html-path
  $ git --man-path
  $ git --exec-path
  
  but I am not sure if these are enough, or if it would help them to
  add a bit more, then what these a bit more are.
 
 I think this is enough - now I need to go and make git-integration's
 Makefile use them by default rather than just using the same defaults as
 git.git.

This is wrong. Subprojects should use /usr/bin/ and /usr/share/man/ and
not rely on the output of `git --exec-path` and so on.

For example if the user has installed Git in his $home, when building a
package the package manager would use ~/libexec/git-core, which is
wrong.

Moreover, if you are cross-compiling you won't be able to run the
target's `git` binary.

If anything, it should be `pkg-config --variable=exec-path git`.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Greg Troxel

Junio C Hamano gits...@pobox.com writes:

 You raised a good point on the issue of external dependencies may
 impact Git as a whole, even for those who are not interested in the
 particular remote helpers at all.  I'll have to think about it.

(As I'm sure you know, but starting from the beginning.)  There are
basically two ways that a program can be built.  One is by a user on a
particular system.  There, checking to see if various libraries are
installed and if so enabling some additional feature (that isn't that
hard/time-consuming to build) is entirely reasonable.

In a packaging system, dependencies are much more troublesome.
Dependencies have to be declared, and the build limited to use only
those declared dependencies, in order to get repeatable builds and
binary packages that can be used on other systems.  Dependencies that
really are required are fine.  But optional dependencies are a problem,
because e.g. one doesn't want to require the presence of qt to build
something (that isn't already enormous).   So if git needs mercurial and
subversion installed, plus perhaps 5 other things for less popular
remote helpers, that starts to be a real burden.

(I realize some packaging systems have a style where the union of the
possible dependencies must be present to build, and then the resulting
binaries are allocated to split packages.  But that's not universal, and
it still requires large amounts of unnecessary dependencies to build a
package from source.)

Ideally, the core of git would have a small set of dependencies, and
optional language bindings or remote helpers could be built
independently (by running a different build, after git proper was built
and installed).  It seems more likely that the property of independent
builds of optional components will be preserved if the various git-foo
pieces are in seaprate trees.  But if they are in subdirs of the main
git tree, and build by ./configure  make  make install in the
subdir, that's arguably equivalent.


pgppg0HzmvEjx.pgp
Description: PGP signature


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Junio C Hamano
John Keeping j...@keeping.me.uk writes:

 On Tue, May 06, 2014 at 05:01:59PM -0700, Junio C Hamano wrote:
 ...
 Another thing to keep in mind is that we need to ensure that we give
 a good way for these third-party tools to integrate well with the
 core Git tools to form a single toolchest for the users.  I would
 love to be able to do
 
 $ (cd git.git  make install)
 $ (cd git-imerge.git  make install)
 
 and then say git imerge, git --help imerge, etc.  The same for
 the remote helpers that we may be splitting out of my tree into
 their own stand-alone projects.

 This can already work given suitable installation.  With
 git-integration[1] I can type `git help integration` and it shows me the
 man page in the same way that `git help commit` does.  When I manually
 linked the HTML file to the right place `git help -w integration` worked
 as well.

That when I manually part is what I meant by we give a good way
for these third-party tools above, and make it really easy to
install these third-party tools in the remaining part of the
message you are responding to.

 I think this is enough...

Thanks.

The reason why I CC'ed Michael was primarily because I thought you
were not one of those third-party tools maintainers (and secondarily
I am a fairly big fan of imerge), but it is good to hear your
opinion as another third-party provider.  Your git-integrate might
turn into something I could augment my workflow with with some
additions.  What is missing (I only read the full manual page at
http://johnkeeping.github.io/git-integration/git-integration.html)
to support my workflow seems to be:

 - specifying a merge strategy per branch being merged;
 - support evil merges or picking a fix-up commit;
 - leaving an empty commit only to leave comment in the history.

and until that happens, I'll keep using the Reintegrate script found
in my 'todo' branch.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread John Keeping
On Wed, May 07, 2014 at 11:56:18AM -0700, Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:
 
  On Tue, May 06, 2014 at 05:01:59PM -0700, Junio C Hamano wrote:
  ...
  Another thing to keep in mind is that we need to ensure that we give
  a good way for these third-party tools to integrate well with the
  core Git tools to form a single toolchest for the users.  I would
  love to be able to do
  
  $ (cd git.git  make install)
  $ (cd git-imerge.git  make install)
  
  and then say git imerge, git --help imerge, etc.  The same for
  the remote helpers that we may be splitting out of my tree into
  their own stand-alone projects.
 
  This can already work given suitable installation.  With
  git-integration[1] I can type `git help integration` and it shows me the
  man page in the same way that `git help commit` does.  When I manually
  linked the HTML file to the right place `git help -w integration` worked
  as well.
 
 That when I manually part is what I meant by we give a good way
 for these third-party tools above, and make it really easy to
 install these third-party tools in the remaining part of the
 message you are responding to.
 
  I think this is enough...

Having thought about it a bit more after reading Felipe's reply, it
would be nice if there were some way for third-party tools to install
HTML documentation without relying on `git --html-path` but I cannot see
an obvious way to do that as there isn't a standard $HTML_PATH to match
$MAN_PATH and $PATH.

I've never tried `git help --info` until this thread, but I think we
could make some trivial improvements to that in order to support .info
documentation for third-party tools.

 The reason why I CC'ed Michael was primarily because I thought you
 were not one of those third-party tools maintainers (and secondarily
 I am a fairly big fan of imerge), but it is good to hear your
 opinion as another third-party provider.  Your git-integrate might
 turn into something I could augment my workflow with with some
 additions.  What is missing (I only read the full manual page at
 http://johnkeeping.github.io/git-integration/git-integration.html)
 to support my workflow seems to be:
 
  - specifying a merge strategy per branch being merged;

This is already supported by the merge instruction:

If any options are given after the ref (and on the same line)
then these are passed to git merge. This may be useful for
specifying an alternative merge strategy for a branch.

  - support evil merges or picking a fix-up commit;

I have an implementation of this on a branch, but have never merged it
because it's not something I need to do often and it is very hard to
support for git-integration's status output.

One of my primary use cases for git-integration involves pulling
together branches owned by others (either in the same repository or by
having fetched from their repositories); in this case it is interesting
to see if/how a branch has changed since the last time the integration
branch was built.  This also handles changes to the instruction sheet
without an immediate rebuild.

I have not found a good way of figuring out whether a fixup commit has
been applied and squashed into a merge) so I have let the branch sit
there awaiting a perfect solution (which I doubt exists).  It may be
that the status of a fixup is unimportant, so it could just be marked as
unknown; I am mostly convinced that marking it as unknown is going to be
better than an heuristic that is right most of the time.

  - leaving an empty commit only to leave comment in the history.

This would be easy to add.

 and until that happens, I'll keep using the Reintegrate script found
 in my 'todo' branch.

When I originally wrote git-integration I purposefully did not target
your workflow because I (perhaps wrongly) assumed that the interaction
between the different integration branches would mean that Git was
better served sticking to the custom Reintegrate script.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Felipe Contreras
John Keeping wrote:
 Having thought about it a bit more after reading Felipe's reply, it
 would be nice if there were some way for third-party tools to install
 HTML documentation without relying on `git --html-path` but I cannot
 see an obvious way to do that as there isn't a standard $HTML_PATH to
 match $MAN_PATH and $PATH.

Using `git --html-path` for that is wrong.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Felipe Contreras
Greg Troxel wrote:
 In a packaging system, dependencies are much more troublesome.
 Dependencies have to be declared, and the build limited to use only
 those declared dependencies, in order to get repeatable builds and
 binary packages that can be used on other systems.  Dependencies that
 really are required are fine.  But optional dependencies are a
 problem, because e.g. one doesn't want to require the presence of qt
 to build something (that isn't already enormous).   So if git needs
 mercurial and subversion installed, plus perhaps 5 other things for
 less popular remote helpers, that starts to be a real burden.

It doesn't *need* them to build. The Mercurial/Bazaar dependencies are
optional, both at build-time and at run-time. Most distributions would
want to test the functionality they are distributing, and for testing
they do need these dependencies.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Felipe Contreras
Junio C Hamano wrote:
 That when I manually part is what I meant by we give a good way for
 these third-party tools above, and make it really easy to install
 these third-party tools in the remaining part of the message you are
 responding to.

We need two things:

  1) Provied a pkg-config, as all sane shared components do
  2) Split the testing framework so third-parties don't have to rely on
 yet another third-parth (shareness)

 Your git-integrate might turn into something I could augment my
 workflow with with some additions.
 
  - specifying a merge strategy per branch being merged;

git-reintegrate[1] supports this.

  - support evil merges or picking a fix-up commit;

git-reintegrate supports this.

  - leaving an empty commit only to leave comment in the history.

Done[2].


 and until that happens, I'll keep using the Reintegrate script found
 in my 'todo' branch.

My git-reintegrate supports everything John's git-integrate and in
addition it supports generating the commands from an existing branch,
like your Reintegrate. IOW; it's superior.

[1] https://github.com/felipec/git-reintegrate
[2] 
https://github.com/felipec/git-reintegrate/commit/332412470c6e084f10ac2f8dc11e86ab4680974a

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread John Keeping
On Wed, May 07, 2014 at 03:26:15PM -0500, Felipe Contreras wrote:
 Junio C Hamano wrote:
  Your git-integrate might turn into something I could augment my
  workflow with with some additions.
  
   - specifying a merge strategy per branch being merged;
 
 git-reintegrate[1] supports this.
 
   - support evil merges or picking a fix-up commit;
 
 git-reintegrate supports this.
 
   - leaving an empty commit only to leave comment in the history.
 
 Done[2].
 
 
  and until that happens, I'll keep using the Reintegrate script found
  in my 'todo' branch.
 
 My git-reintegrate supports everything John's git-integrate and in
 addition it supports generating the commands from an existing branch,
 like your Reintegrate. IOW; it's superior.

And yet the documentation is unchanged from the version you copied in
from git-integration.  Personally I would much rather use a project
which takes time to document all of the features rather than relying on
reading the code to figure out the options.

More features does not make a project superior.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Felipe Contreras
John Keeping wrote:
 On Wed, May 07, 2014 at 03:26:15PM -0500, Felipe Contreras wrote:
  Junio C Hamano wrote:
   Your git-integrate might turn into something I could augment my
   workflow with with some additions.
   
- specifying a merge strategy per branch being merged;
  
  git-reintegrate[1] supports this.
  
- support evil merges or picking a fix-up commit;
  
  git-reintegrate supports this.
  
- leaving an empty commit only to leave comment in the history.
  
  Done[2].
  
  
   and until that happens, I'll keep using the Reintegrate script found
   in my 'todo' branch.
  
  My git-reintegrate supports everything John's git-integrate and in
  addition it supports generating the commands from an existing branch,
  like your Reintegrate. IOW; it's superior.
 
 And yet the documentation is unchanged from the version you copied in
 from git-integration.

Not much has changed since v0.1 since that version already worked
perfectly. But I'll update it.

 Personally I would much rather use a project which takes time to
 document all of the features rather than relying on reading the code
 to figure out the options.

And I would rather use a project that concentrates on having the
features users need.

 More features does not make a project superior.

No, better features do.

Either way. Documentation updated.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Greg Troxel

Felipe Contreras felipe.contre...@gmail.com writes:

 Greg Troxel wrote:
 In a packaging system, dependencies are much more troublesome.
 Dependencies have to be declared, and the build limited to use only
 those declared dependencies, in order to get repeatable builds and
 binary packages that can be used on other systems.  Dependencies that
 really are required are fine.  But optional dependencies are a
 problem, because e.g. one doesn't want to require the presence of qt
 to build something (that isn't already enormous).   So if git needs
 mercurial and subversion installed, plus perhaps 5 other things for
 less popular remote helpers, that starts to be a real burden.

 It doesn't *need* them to build. The Mercurial/Bazaar dependencies are
 optional, both at build-time and at run-time. Most distributions would
 want to test the functionality they are distributing, and for testing
 they do need these dependencies.

My point is that a packaging of git needs to either decide to forego
these optional parts, or to include them, in the default case.  One
choice means that anyone who builds the package from source has to have
the dependencies, and the other means that users of the built package(s)
can't use the features.  I realize that in Linux it's perhaps typical to
not worry about burdening builders because actually building is very
rare, but that's only reasonable because of having only one OS and
perhaps three CPUs; with dozens each, building from source becomes more
frequent.  So I'm merely trying to suggest that it's better to have a
core package with a restrained set of dependencies, and then a way to
build the other things independently (perhaps assuming the core is
built/installed), each with their own dependencies.

It turns out in pkgsrc that git-svn is a meta-package (with no files)
that depends on git-base (no man pages, no gitk) and p5-subversion.
hg-git appears to be a separate source distribution, depending on a
python implementation of the git formats.  So perhaps the situation is
currently ok.  I was just trying to point out the issue to avoid
regressions in the packaging situation.




pgptdIoL4IFDe.pgp
Description: PGP signature


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-07 Thread Felipe Contreras
Greg Troxel wrote:
 
 Felipe Contreras felipe.contre...@gmail.com writes:
 
  Greg Troxel wrote:
  In a packaging system, dependencies are much more troublesome.
  Dependencies have to be declared, and the build limited to use only
  those declared dependencies, in order to get repeatable builds and
  binary packages that can be used on other systems.  Dependencies that
  really are required are fine.  But optional dependencies are a
  problem, because e.g. one doesn't want to require the presence of qt
  to build something (that isn't already enormous).   So if git needs
  mercurial and subversion installed, plus perhaps 5 other things for
  less popular remote helpers, that starts to be a real burden.
 
  It doesn't *need* them to build. The Mercurial/Bazaar dependencies are
  optional, both at build-time and at run-time. Most distributions would
  want to test the functionality they are distributing, and for testing
  they do need these dependencies.
 
 My point is that a packaging of git needs to either decide to forego
 these optional parts, or to include them, in the default case.

That is currently the case. They would be included by default, but not
usable unless the *optional* dependencies are installed.

 So I'm merely trying to suggest that it's better to have a core
 package with a restrained set of dependencies, and then a way to build
 the other things independently (perhaps assuming the core is
 built/installed), each with their own dependencies.

I'm all in favor of 'make install' installing only the core of Git, and
different targets for all the other parts.

However, if you take a look at any distribution's packaing of Git you
would see why that wouldn't be desirable (they are full of hacks and
fixes). If the build system is eventually fixed so one package can do
'make install', another 'make install-p4', another 'make install-hg' and
so on, that would be great. But we are pretty far from that.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-06 Thread John Keeping
On Mon, May 05, 2014 at 04:50:58PM -0700, Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:
 
 Having said all that, there is one caveat.
 
  Since the remote helper interface is stable and the remote helpers do
  not use any of the Git internals, I consider the risks of including them
  in core Git to outweigh the benefits of wider distribution.
 
 You are correct to say that a remote helper has to talk with a
 foreign system and it would not help to dictate the update schedule
 of helpers to match the release cycle of Git itself.  At the same
 time, however, the interface the remote helpers use to talk to Git
 has not been as stable as you seem to think, I am afraid.  For
 example, a recent remote-hg/bzr series needed some enhancements to
 fast-import to achieve the feature parity with native transports by
 adding a missing feature or two on the Git side.

This doesn't qualify as an unstable interface for me.  In this case, the
remote helpers could not support a feature without Git supporting it
first, which is quite natural and the remote helper can then guard that
feature with a capability check.  I do not think it likely that the
remote helper interface will ever change in such a way that all remote
helpers must be updated, at least not without a long deprecation period.

The Mercurial API makes no such guarantee; it is considered a private
implementation detail and most releases seem to contain some changes
that require all consumers to be updated.

There is a different level of urgency between you cannot use this new
feature until you update Git and if you update Mercurial then the
remote helper will stop working, and that's why I think the remote
helpers may benefit from a separate release schedule.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-06 Thread Junio C Hamano
John Keeping j...@keeping.me.uk writes:

 And it is now probably too late for that to make Git 2.0,...

Anything with end-user visible changes in the core part that is not
a fix to a regression introduced between v1.9.0..master is too late
for the upcoming release.  We are way past -rc1.

 So I think these are the two options:
 
   1) Include git-remote-hg/bzr to the core and distribute them by
  default (as is the current intention)
 
   2) Remove git-remote-hg/bzr entirely from the Git tree. And do the
  same for other tools: git-p4, git-svn, git-cvs*. Given the huge
  amount of people using Subversion, we might want to defer that one
  for later, but eventually do it.

Isn't there a middle ground?  The option 1.5 may be like this:

 - Eject tools in contrib/ that would benefit the users better if
   they were outside my tree.  There are a few points to consider
   when judging benefit better if outside:

   * Their release cycle requirements are better met outside my tree
 (the remote-hg depends not just on Git but Hg internal issue
 we have discussed).

   * They are actively maintained.  The overall Git maintainer would
 merely be being a bottleneck than being a helpful editor with
 respect to these tools if we keep them in my tree, and we
 expect that the tool maintainer would do a much better job
 without me.

 - Keep tools that are not actively maintained but still used by the
   users widely in my tree, but when their external dependencies
   become baggage to Git as a whole, demote them to contrib/ and
   stop installing them by default.

 - I would not mind having install.contrib-frotz target in the
   top-level Makefile for each of the remaining contrib/frotz
   hierarchies for those users and distro packagers who know their
   platform meets the dependency requirements.

 I'm not sure it needs to
 wait for a major Git release since most of the impact is on package
 maintainers and not end users.

Removal of features is a big deal, I would think, though.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-06 Thread Felipe Contreras
Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:
 
  And it is now probably too late for that to make Git 2.0,...
 
 Anything with end-user visible changes in the core part that is not
 a fix to a regression introduced between v1.9.0..master is too late
 for the upcoming release.  We are way past -rc1.

The patch in question only affects users of hg v3.0 since it's
surrounded by a 'check_version(3, 0)'. Therefore it cannot introduce
regressions, there's no reason not to apply it.

  So I think these are the two options:
  
1) Include git-remote-hg/bzr to the core and distribute them by
   default (as is the current intention)
  
2) Remove git-remote-hg/bzr entirely from the Git tree. And do the
   same for other tools: git-p4, git-svn, git-cvs*. Given the huge
   amount of people using Subversion, we might want to defer that one
   for later, but eventually do it.
 
 Isn't there a middle ground?  The option 1.5 may be like this:
 
  - Eject tools in contrib/ that would benefit the users better if
they were outside my tree.  There are a few points to consider
when judging benefit better if outside:
 
* Their release cycle requirements are better met outside my tree
  (the remote-hg depends not just on Git but Hg internal issue
  we have discussed).

Shouldn't *I* be the one most qualified to know if the release cycle
requirements are better met outside the git.git tree?

* They are actively maintained.  The overall Git maintainer would
  merely be being a bottleneck than being a helpful editor with
  respect to these tools if we keep them in my tree, and we
  expect that the tool maintainer would do a much better job
  without me.

Perhaps. But only if the patches are reviewed throught the git mailing
list.

And what about the tools that are not actively maintainted? For example
'contrib/hg-to-git'.
 
  - Keep tools that are not actively maintained but still used by the
users widely in my tree, but when their external dependencies
become baggage to Git as a whole, demote them to contrib/ and
stop installing them by default.

That implies that git-remote-hg would become a baggage to Git as a
whole.

If you are arguing that git-remote-hg should be distributed by default,
and only if the dependencies become a problem, demote to 'contrib/' that
is fine. The same for git-p4 and other tools already out of contrib.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-06 Thread Junio C Hamano
John Keeping j...@keeping.me.uk writes:

 On Mon, May 05, 2014 at 04:50:58PM -0700, Junio C Hamano wrote:
 ...
 At the same
 time, however, the interface the remote helpers use to talk to Git
 has not been as stable as you seem to think, I am afraid.  For
 example, a recent remote-hg/bzr series needed some enhancements to
 fast-import to achieve the feature parity with native transports by
 adding a missing feature or two on the Git side.

 This doesn't qualify as an unstable interface for me.

That is true, but that does not change the equation very much, no?
To a remote-helper maintainer, bundled is easier to maintain than
unbundled, because both sides are changing, and regardless of the
nature of the change, s/he would know how the Git side looks like if
bundled.

Having said that, I agree with the conclusion of your message:

 There is a different level of urgency between you cannot use this new
 feature until you update Git and if you update Mercurial then the
 remote helper will stop working, and that's why I think the remote
 helpers may benefit from a separate release schedule.

and I am inclined to be persuaded that the users of remote-hg/bzr
may better off if they are unbundled from my tree.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-06 Thread Felipe Contreras
Junio C Hamano wrote:
 Having said that, I agree with the conclusion of your message:
 
  There is a different level of urgency between you cannot use this
  new feature until you update Git and if you update Mercurial then
  the remote helper will stop working, and that's why I think the
  remote helpers may benefit from a separate release schedule.

The conclusion is correct, the premises are not.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-06 Thread Junio C Hamano
John Keeping j...@keeping.me.uk writes:

 I'd like to register my opposition to moving git-remote-{bzr,hg} out of
 contrib/.

 I am not convinced that tools for interoperating with other VCSs need to
 be part of core Git; as Junio has pointed out previously, while contrib/
 was necessary ... Associated tools can
 therefore live on their own and do not need to be promoted as part of
 Git itself (as git-imerge is doing successfully).

Another thing to keep in mind is that we need to ensure that we give
a good way for these third-party tools to integrate well with the
core Git tools to form a single toolchest for the users.  I would
love to be able to do

$ (cd git.git  make install)
$ (cd git-imerge.git  make install)

and then say git imerge, git --help imerge, etc.  The same for
the remote helpers that we may be splitting out of my tree into
their own stand-alone projects.

I _think_ it probably is OK for git-imerge.git/Makefile to peek into
our Makefile, e.g.

$ cd git-imerge.git
$ make GIT_SOURCE_DIR=../git.git install

to learn where imerge should install its subcommand implementation
and documentation.  It might even want to borrow the test framework
by using $GIT_SOURCE_DIR/t/test-lib.sh or somesuch.  There may be
some changes the third-party tool authors would want to have in our
Makefile to help them better when building their tools this way; I
dunno.

I also think that there should be a way to make it really easy to
install these third-party tools to augment the installed version of
Git without having the source tree of Git.  We have ways for them to
ask us where things are expected to be, e.g.

$ git --html-path
$ git --man-path
$ git --exec-path

but I am not sure if these are enough, or if it would help them to
add a bit more, then what these a bit more are.

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-06 Thread Felipe Contreras
Junio C Hamano wrote:
 I _think_ it probably is OK for git-imerge.git/Makefile to peek into
 our Makefile, e.g.
 
 $ cd git-imerge.git
 $ make GIT_SOURCE_DIR=../git.git install
 
 to learn where imerge should install its subcommand implementation and
 documentation.  It might even want to borrow the test framework by
 using $GIT_SOURCE_DIR/t/test-lib.sh or somesuch.

Since Git's test framework heavily tied to git.git, sharness[1] is the
only sensible option. It might not have all the latest features of Git's
test framework, but it's standalone.

[1] https://github.com/mlafeldt/sharness

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-05 Thread John Keeping
On Tue, Apr 29, 2014 at 03:38:07PM -0700, Junio C Hamano wrote:
 * fc/remote-helpers-hg-bzr-graduation (2014-04-29) 11 commits
  - remote-hg: trivial cleanups
  - remote-hg: make sure we omit multiple heads
  - git-remote-hg: use internal clone's hgrc
  - t: remote-hg: split into setup test
  - remote-hg: properly detect missing contexts
  - remote-{hg,bzr}: store marks only on success
  - remote-hg: update to 'public' phase when pushing
  - remote-hg: fix parsing of custom committer
   (merged to 'next' on 2014-04-22 at fed170a)
  + remote-helpers: move tests out of contrib
  + remote-helpers: move out of contrib
  + remote-helpers: squelch python import exceptions
 
  Move remote-hg and remote-bzr out of contrib/.  There were some
  suggestions on the follow-up fix patches still not in 'next', which
  may result in a reroll.
 
  Will merge to 'next' and keep it there for the remainder of the
  cycle.

I'd like to register my opposition to moving git-remote-{bzr,hg} out of
contrib/.

I am not convinced that tools for interoperating with other VCSs need to
be part of core Git; as Junio has pointed out previously, while contrib/
was necessary for promoting associated tools when Git was young and had
not established mindshare, Git is now by far the most popular DVCS and
is rapidly catching up with centralized systems.  Associated tools can
therefore live on their own and do not need to be promoted as part of
Git itself (as git-imerge is doing successfully).

In the case of git-remote-hg specifically, the remote helper has to use
an interface that the Mercurial developers consider unstable [1]; the
version currently on 'pu' fails the test suite for me because I have
Mercurial 3.0:

AttributeError: 'mqrepo' object has no attribute 'getbundle'

I do not want to end up in a situation where an update to Git is blocked
by a distribution because git-remote-hg is not updated to support newer
versions of Mercurial sufficiently quickly; this previously happened in
Gentoo due to git-svn and meant that was stuck on 1.7.8 until 1.7.13 was
released [2].

Since the remote helper interface is stable and the remote helpers do
not use any of the Git internals, I consider the risks of including them
in core Git to outweigh the benefits of wider distribution.  In fact,
the remote helpers may benefit from having their own release cadences
so that they can respond to changes in related projects more quickly
than the normal Git release cycle.


[1] 
http://mercurial.selenic.com/wiki/MercurialApi#Why_you_shouldn.27t_use_Mercurial.27s_internal_API
[2] https://bugs.gentoo.org/show_bug.cgi?id=418431
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-05 Thread Felipe Contreras
John Keeping wrote:
 I am not convinced that tools for interoperating with other VCSs need to
 be part of core Git; as Junio has pointed out previously, while contrib/
 was necessary for promoting associated tools when Git was young and had
 not established mindshare, Git is now by far the most popular DVCS and
 is rapidly catching up with centralized systems.  Associated tools can
 therefore live on their own and do not need to be promoted as part of
 Git itself (as git-imerge is doing successfully).

Then let's remove git-p4.

 In the case of git-remote-hg specifically, the remote helper has to use
 an interface that the Mercurial developers consider unstable [1];

There is no other sensible way of doing them.

 the version currently on 'pu' fails the test suite for me because I
 have Mercurial 3.0:
 
   AttributeError: 'mqrepo' object has no attribute 'getbundle'

And because this patch has not been picked up[1].

 I do not want to end up in a situation where an update to Git is blocked
 by a distribution because git-remote-hg is not updated to support newer
 versions of Mercurial sufficiently quickly; this previously happened in
 Gentoo due to git-svn and meant that was stuck on 1.7.8 until 1.7.13 was
 released [2].

Travis-CI ensures that won't happen[2].

 Since the remote helper interface is stable and the remote helpers do
 not use any of the Git internals, I consider the risks of including them
 in core Git to outweigh the benefits of wider distribution.  In fact,
 the remote helpers may benefit from having their own release cadences
 so that they can respond to changes in related projects more quickly
 than the normal Git release cycle.

Maybe, but git-remote-hg has already benefitted a lot from the wider
exposure of being in 'contrib/', I'm sure it would benefit even more if
it's distributed by default.

Moreover, there's a ton of subpar tools out there[3], and I believe
giving the burden of choosing one to the user is detrimental to the Git
project. If we as a project say: this is the one we recommend, and has
the Git stamp, that helps the users tremendously.

Your point is valid though, but it's valid not just for
git-remote-hg/bzr.

So I think these are the two options:

  1) Include git-remote-hg/bzr to the core and distribute them by
 default (as is the current intention)

  2) Remove git-remote-hg/bzr entirely from the Git tree. And do the
 same for other tools: git-p4, git-svn, git-cvs*. Given the huge
 amount of people using Subversion, we might want to defer that one
 for later, but eventually do it.

I'd say for v2.0 we should go for 1), and 2) should be considered for
v3.0, perhaps.

[1] http://article.gmane.org/gmane.comp.version-control.git/248065
[2] https://travis-ci.org/felipec/git
[3] https://github.com/felipec/git/wiki/Comparison-of-git-remote-hg-alternatives

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-05 Thread John Keeping
On Mon, May 05, 2014 at 02:08:28PM -0500, Felipe Contreras wrote:
 John Keeping wrote:
  I am not convinced that tools for interoperating with other VCSs need to
  be part of core Git; as Junio has pointed out previously, while contrib/
  was necessary for promoting associated tools when Git was young and had
  not established mindshare, Git is now by far the most popular DVCS and
  is rapidly catching up with centralized systems.  Associated tools can
  therefore live on their own and do not need to be promoted as part of
  Git itself (as git-imerge is doing successfully).
 
 Then let's remove git-p4.

If git-p4 were not already in the core, I would be making precisely the
same argument regarding it (and the others you identify below).

  In the case of git-remote-hg specifically, the remote helper has to use
  an interface that the Mercurial developers consider unstable [1];
 
 There is no other sensible way of doing them.
 
  the version currently on 'pu' fails the test suite for me because I
  have Mercurial 3.0:
  
  AttributeError: 'mqrepo' object has no attribute 'getbundle'
 
 And because this patch has not been picked up[1].

And it is now probably too late for that to make Git 2.0, which means it
may be another 12 weeks before it makes it into a Git release.  Since
this is quite a minor change it may make it into a stable release, but
what would happen if the required changes were much more involved?

  I do not want to end up in a situation where an update to Git is blocked
  by a distribution because git-remote-hg is not updated to support newer
  versions of Mercurial sufficiently quickly; this previously happened in
  Gentoo due to git-svn and meant that was stuck on 1.7.8 until 1.7.13 was
  released [2].
 
 Travis-CI ensures that won't happen[2].

I don't see that building against Mercurial's default branch, so it will
not help with future releases.

  Since the remote helper interface is stable and the remote helpers do
  not use any of the Git internals, I consider the risks of including them
  in core Git to outweigh the benefits of wider distribution.  In fact,
  the remote helpers may benefit from having their own release cadences
  so that they can respond to changes in related projects more quickly
  than the normal Git release cycle.
 
 Maybe, but git-remote-hg has already benefitted a lot from the wider
 exposure of being in 'contrib/', I'm sure it would benefit even more if
 it's distributed by default.

Is that because it was included in contrib/ or just as a result of being
publicised on this list and elsewhere?  I don't think git-imerge is
suffering from being its own project and git-subtree appears to have
received very little attention despite being in contrib/.

 Moreover, there's a ton of subpar tools out there[3], and I believe
 giving the burden of choosing one to the user is detrimental to the Git
 project. If we as a project say: this is the one we recommend, and has
 the Git stamp, that helps the users tremendously.

But by choosing one now, we are stuck promoting that one even if a
better alternative comes along in the future.  We have seen that with
git-cvsimport and it's not dissimilar to the situation with git-pull.

 Your point is valid though, but it's valid not just for
 git-remote-hg/bzr.
 
 So I think these are the two options:
 
   1) Include git-remote-hg/bzr to the core and distribute them by
  default (as is the current intention)
 
   2) Remove git-remote-hg/bzr entirely from the Git tree. And do the
  same for other tools: git-p4, git-svn, git-cvs*. Given the huge
  amount of people using Subversion, we might want to defer that one
  for later, but eventually do it.

Don't forget git-archimport...

My personal vote would be for 2), splitting the bridges to other VCSs
into their own repositories but there would need to be some guarantee
that they would continue to be maintained.  I'm not sure it needs to
wait for a major Git release since most of the impact is on package
maintainers and not end users.

 I'd say for v2.0 we should go for 1), and 2) should be considered for
 v3.0, perhaps.

I don't think there is any advantage to adding new tools now if we only
intend to remove them in the future.

 [1] http://article.gmane.org/gmane.comp.version-control.git/248065
 [2] https://travis-ci.org/felipec/git
 [3] 
 https://github.com/felipec/git/wiki/Comparison-of-git-remote-hg-alternatives
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-05 Thread Felipe Contreras
John Keeping wrote:
 On Mon, May 05, 2014 at 02:08:28PM -0500, Felipe Contreras wrote:
  John Keeping wrote:
   I am not convinced that tools for interoperating with other VCSs need to
   be part of core Git; as Junio has pointed out previously, while contrib/
   was necessary for promoting associated tools when Git was young and had
   not established mindshare, Git is now by far the most popular DVCS and
   is rapidly catching up with centralized systems.  Associated tools can
   therefore live on their own and do not need to be promoted as part of
   Git itself (as git-imerge is doing successfully).
  
  Then let's remove git-p4.
 
 If git-p4 were not already in the core, I would be making precisely the
 same argument regarding it (and the others you identify below).

So basically you are arguing against any change.

   the version currently on 'pu' fails the test suite for me because I
   have Mercurial 3.0:
   
 AttributeError: 'mqrepo' object has no attribute 'getbundle'
  
  And because this patch has not been picked up[1].
 
 And it is now probably too late for that to make Git 2.0,

That's not for you to decide.

 which means it may be another 12 weeks before it makes it into a Git
 release.  Since this is quite a minor change it may make it into a
 stable release, but what would happen if the required changes were
 much more involved?

All the Mercurial API compatibility issues I have seen are trivial.

   I do not want to end up in a situation where an update to Git is blocked
   by a distribution because git-remote-hg is not updated to support newer
   versions of Mercurial sufficiently quickly; this previously happened in
   Gentoo due to git-svn and meant that was stuck on 1.7.8 until 1.7.13 was
   released [2].
  
  Travis-CI ensures that won't happen[2].
 
 I don't see that building against Mercurial's default branch, so it will
 not help with future releases.

I can easily add that.

   Since the remote helper interface is stable and the remote helpers do
   not use any of the Git internals, I consider the risks of including them
   in core Git to outweigh the benefits of wider distribution.  In fact,
   the remote helpers may benefit from having their own release cadences
   so that they can respond to changes in related projects more quickly
   than the normal Git release cycle.
  
  Maybe, but git-remote-hg has already benefitted a lot from the wider
  exposure of being in 'contrib/', I'm sure it would benefit even more if
  it's distributed by default.
 
 Is that because it was included in contrib/ or just as a result of being
 publicised on this list and elsewhere?

The former I'd bet.

 I don't think git-imerge is suffering from being its own project and
 git-subtree appears to have received very little attention despite
 being in contrib/.

Apples and oranges. There aren't scores of tools out there trying to do
what git-subtree does.

  Moreover, there's a ton of subpar tools out there[3], and I believe
  giving the burden of choosing one to the user is detrimental to the Git
  project. If we as a project say: this is the one we recommend, and has
  the Git stamp, that helps the users tremendously.
 
 But by choosing one now, we are stuck promoting that one even if a
 better alternative comes along in the future.

Are there better alternatives coming in the future?

  Your point is valid though, but it's valid not just for
  git-remote-hg/bzr.
  
  So I think these are the two options:
  
1) Include git-remote-hg/bzr to the core and distribute them by
   default (as is the current intention)
  
2) Remove git-remote-hg/bzr entirely from the Git tree. And do the
   same for other tools: git-p4, git-svn, git-cvs*. Given the huge
   amount of people using Subversion, we might want to defer that one
   for later, but eventually do it.
 
 Don't forget git-archimport...
 
 My personal vote would be for 2), splitting the bridges to other VCSs
 into their own repositories but there would need to be some guarantee
 that they would continue to be maintained.  I'm not sure it needs to
 wait for a major Git release since most of the impact is on package
 maintainers and not end users.

Sure, we might not need to wait for v3.0, but that's not the point. The
point is that we should be consistent, and that means going for 1) in
v2.0.

  I'd say for v2.0 we should go for 1), and 2) should be considered for
  v3.0, perhaps.
 
 I don't think there is any advantage to adding new tools now if we only
 intend to remove them in the future.

Do we intend to remove them in the future? That hasn't been decided.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-05 Thread Felipe Contreras
Felipe Contreras wrote:
 John Keeping wrote:
  I don't see that building against Mercurial's default branch, so it
  will not help with future releases.
 
 I can easily add that.

There:
https://travis-ci.org/felipec/git

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-05 Thread Junio C Hamano
John Keeping j...@keeping.me.uk writes:

 On Tue, Apr 29, 2014 at 03:38:07PM -0700, Junio C Hamano wrote:
 * fc/remote-helpers-hg-bzr-graduation (2014-04-29) 11 commits
  ...
  Move remote-hg and remote-bzr out of contrib/.  There were some
  suggestions on the follow-up fix patches still not in 'next', which
  may result in a reroll.
 
  Will merge to 'next' and keep it there for the remainder of the
  cycle.

 I'd like to register my opposition to moving git-remote-{bzr,hg} out of
 contrib/.
 ...
 In the case of git-remote-hg specifically, the remote helper has to use
 an interface that the Mercurial developers consider unstable [1];...
 I do not want to end up in a situation where an update to Git is blocked
 by a distribution because git-remote-hg is not updated to support newer
 versions of Mercurial sufficiently quickly; this previously happened in
 Gentoo due to git-svn and meant that was stuck on 1.7.8 until 1.7.13 was
 released [2].

The same argument would apply to git-svn, git-p4, and git-cvsimport,
I would think.

Among these, I am not sure if we can find willing maintainers who
can give enough love to them.  But unlike these other importers,
remote-hg and remote-bzr do have an active maintainer (and IIRC I
think I heard that Hg one even has an active competitor or two?) so
I am reasonably confident that these can live on their own merit
outside of my tree.  In the ideal world, I would think it may be
even beneficial to the end users of these helpers to unbundle them.

You raised a good point on the issue of external dependencies may
impact Git as a whole, even for those who are not interested in the
particular remote helpers at all.  I'll have to think about it.

The silly thing is that I totally forgot that we almost got
ourselves into a very similar situation on cvsimport when a series
wanted to make it cvsps3-only.  It is very possible nobody would
have picked up the entire new release, if we merged that change.

Having said all that, there is one caveat.

 Since the remote helper interface is stable and the remote helpers do
 not use any of the Git internals, I consider the risks of including them
 in core Git to outweigh the benefits of wider distribution.

You are correct to say that a remote helper has to talk with a
foreign system and it would not help to dictate the update schedule
of helpers to match the release cycle of Git itself.  At the same
time, however, the interface the remote helpers use to talk to Git
has not been as stable as you seem to think, I am afraid.  For
example, a recent remote-hg/bzr series needed some enhancements to
fast-import to achieve the feature parity with native transports by
adding a missing feature or two on the Git side.

So in reality, a helper has to talk with two sides, needs to adjust
to changes in the both sides, and both sides are changing.

Unbundling a helper from Git would place more burden on the helper's
maintainer, because the helper has to know enough about versions and
features of both sides (the foreign system and Git) to adjust its
behaviour, to stay compatible with wider versions of both foreign
systems and Git.  Unbundling, when done properly, may give more
ideal user experience to the end users, because such a helper would
allow them to pick up the latest (or stay on an older but known to
be stable) version of the helper and expect it to work with the
foreign system and Git they happen to have.

It however would be easier to maintain if the helper maintainer
knows a change to Git itself will be released at the same time as
the new version of the helper that takes advantage of the modified
Git.  The helper maintainer only has to worry about compatibility
with the foreign side if it is bundled with Git.

So it boils down to how much resource are there to make sure a
helper will stay compatible with wider versions of both sides? and
how far backwards are helper maintainers willing to bend to support
users better?.



--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-05 Thread Felipe Contreras
Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:

  In the case of git-remote-hg specifically, the remote helper has to use
  an interface that the Mercurial developers consider unstable [1];...
  I do not want to end up in a situation where an update to Git is blocked
  by a distribution because git-remote-hg is not updated to support newer
  versions of Mercurial sufficiently quickly; this previously happened in
  Gentoo due to git-svn and meant that was stuck on 1.7.8 until 1.7.13 was
  released [2].
 
 The same argument would apply to git-svn, git-p4, and git-cvsimport,
 I would think.
 
 Among these, I am not sure if we can find willing maintainers who
 can give enough love to them.  But unlike these other importers,
 remote-hg and remote-bzr do have an active maintainer (and IIRC I
 think I heard that Hg one even has an active competitor or two?)

Unfortunately there are no more real competitors to remote-hg. A far as
I can tell msysgit has dropped their remote helper, and gitifyhg is not
being actively maintatined and it's even pointing to our git-remote-hg
as probably the best alternative to use at the moment.

 so I am reasonably confident that these can live on their own merit
 outside of my tree.  In the ideal world, I would think it may be even
 beneficial to the end users of these helpers to unbundle them.

It might be benefitial in the future, but right now I'm willing to bet
there's many people that don't know git-remote-hg/bzr even exist. If Git
v2.0 distributes them by default, and they are mentioned in the release
notes:

 * Transparent support to pull and push to and from Mercurial and Bazaar
   repositories is now enabled by default.

Many more people will know about that, and in the future when we try to
unbundle them they can shout if for some reason it would be inconvenient
for them. At the moment I don't think we can say for sure.

Even if people don't use these bridges, I think just mentioning that
feature helps the project in general.

 You raised a good point on the issue of external dependencies may
 impact Git as a whole, even for those who are not interested in the
 particular remote helpers at all.  I'll have to think about it.

Yes, it's worth thinking about it because it's a real possibility.
However, real possibilities are many times not likely to happen, and I
think this is one of those cases.

As I've said, if history is any indication these issues won't happen. As
far as I can remember the only issues that have happened are backwards
compatibility issues, not present or future. And as I said I've setup
TravisCI builds to detect those, which is why we haven't had those
issues since then.

 So it boils down to how much resource are there to make sure a helper
 will stay compatible with wider versions of both sides? and how far
 backwards are helper maintainers willing to bend to support users
 better?.

This is not that big of an issue. For example, notice how the changes in
the transport-helper to enable say --force and --dry-run did not
require to align changes in remote-hg/bzr. That's because remote-hg/bzr
had already the code for these features, it was just not exercised until
the transport-helper was modified.

I think the current transport-helper infraestructure is already good
enough to detect the features and options of the remote helpers so
unbundling wouldn't be a major problem.

Having said that alignment issues do happen, and we have one of those in
Git v2.0, but I don't think they are a major concern (at least for
remote-hg/bzr).

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-05-05 Thread Felipe Contreras
Felipe Contreras wrote:
 Having said that alignment issues do happen, and we have one of those
 in Git v2.0, but I don't think they are a major concern (at least for
 remote-hg/bzr).

Actually I just noticed that the remote-helpers side is not in the
master branch.

I don't know what is your plan with fc/remote-helpers-hg-bzr-graduation,
but for v2.0 we really want the patch 'remote-{hg,bzr}: store marks only
on success'. Explaining precisely why would take a lot of effort, but
basically it's related to 3994e64 (transport-helper: fix sync issue on
crashes).

If you are worried about merging the whole branch, I could pick only the
important patches and reroll.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


What's cooking in git.git (Apr 2014, #09; Tue, 29)

2014-04-29 Thread Junio C Hamano
Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.

The tip of the 'master' branch has passed v2.0.0-rc1.  Last minute
fixes to newly added code keep flowing in, which is good.  I've
picked up some topics that will not be part of the upcoming release
to 'pu' not to lose them, but I didn't have time to give them a deep
reading.

You can find the changes described here in the integration branches
of the repositories listed at

http://git-blame.blogspot.com/p/git-public-repositories.html

--
[New Topics]

* cc/replace-edit (2014-04-29) 4 commits
 - replace: add --edit option
 - replace: factor object resolution out of replace_object
 - replace: use OPT_CMDMODE to handle modes
 - replace: refactor command-mode determination


* da/imap-send-use-credential-helper (2014-04-29) 1 commit
 - imap-send: use git-credential


* dk/blame-reorg (2014-04-28) 1 commit
 - blame: large-scale performance rewrite


* je/pager-do-not-recurse (2014-04-28) 1 commit
 - pager: do allow spawning pager recursively


* jk/commit-C-pick-empty (2014-04-28) 1 commit
 - commit: do not complain of empty messages from -C


* jk/utf8-switch-between-nfd-and-nfc (2014-04-29) 1 commit
 - t3910: show failure of core.precomposeunicode with decomposed filenames


* mt/send-email-cover-to-cc (2014-04-29) 2 commits
 - test/send-email: to-cover, cc-cover tests
 - git-send-email: two new options: to-cover, cc-cover


* nd/split-index (2014-04-29) 33 commits
 - SQUASH???
 - t1700: new tests for split-index mode
 - t2104: make sure split index mode is off for the version test
 - read-cache: force split index mode with GIT_TEST_SPLIT_INDEX
 - read-tree: note about dropping split-index mode or index version
 - read-tree: force split-index mode off on --index-output
 - rev-parse: add --shared-index-path to get shared index path
 - update-index --split-index: do not split if $GIT_DIR is read only
 - update-index: new options to enable/disable split index mode
 - split-index: strip pathname of on-disk replaced entries
 - split-index: do not invalidate cache-tree at read time
 - split-index: the reading part
 - split-index: the writing part
 - read-cache: mark updated entries for split index
 - read-cache: save deleted entries in split index
 - read-cache: mark new entries for split index
 - read-cache: split-index mode
 - read-cache: save index SHA-1 after reading
 - entry.c: update cache_changed if refresh_cache is set in checkout_entry()
 - cache-tree: mark istate-cache_changed on prime_cache_tree()
 - cache-tree: mark istate-cache_changed on cache tree update
 - cache-tree: mark istate-cache_changed on cache tree invalidation
 - unpack-trees: be specific what part of the index has changed
 - resolve-undo: be specific what part of the index has changed
 - update-index: be specific what part of the index has changed
 - read-cache: be specific what part of the index has changed
 - read-cache: be strict about changed in remove_marked_cache_entries()
 - read-cache: store in-memory flags in the first 12 bits of ce_flags
 - read-cache: relocate and unexport commit_locked_index()
 - read-cache: new API write_locked_index instead of write_index/write_cache
 - sequencer: do not update/refresh index if the lock cannot be held
 - ewah: delete unused ewah_read_mmap_native declaration
 - ewah: fix constness of ewah_read_mmap


* tl/relax-in-poll-emulation (2014-04-29) 1 commit
 - compat/poll: sleep 1 millisecond to avoid busy wait

--
[Stalled]

* tr/merge-recursive-index-only (2014-02-05) 3 commits
 - merge-recursive: -Xindex-only to leave worktree unchanged
 - merge-recursive: internal flag to avoid touching the worktree
 - merge-recursive: remove dead conditional in update_stages()
 (this branch is used by tr/remerge-diff.)

 Will hold.


* tr/remerge-diff (2014-02-26) 5 commits
 . log --remerge-diff: show what the conflict resolution changed
 . name-hash: allow dir hashing even when !ignore_case
 . merge-recursive: allow storing conflict hunks in index
 . revision: fold all merge diff variants into an enum merge_diff_mode
 . combine-diff: do not pass revs-dense_combined_merges redundantly
 (this branch uses tr/merge-recursive-index-only.)

 log -p output learns a new way to let users inspect a merge
 commit by showing the differences between the automerged result
 with conflicts the person who recorded the merge would have seen
 and the final conflict resolution that was recorded in the merge.

 Needs to be rebased, now kb/fast-hashmap topic is in.


* jk/makefile (2014-02-05) 16 commits
 - FIXUP
 - move LESS/LV pager environment to Makefile
 - Makefile: teach scripts to include make variables
 - FIXUP
 - Makefile: auto-build C strings from make variables
 - Makefile: drop *_SQ variables
 - FIXUP
 - Makefile: add c-quote helper function
 - Makefile: introduce sq