* [0/4] What's not in 1.5.2 (overview)
@ 2007-05-16 22:47 Junio C Hamano
2007-05-16 22:47 ` [1/4] What's not in 1.5.2 (have been cooking in next) Junio C Hamano
` (3 more replies)
0 siblings, 4 replies; 55+ messages in thread
From: Junio C Hamano @ 2007-05-16 22:47 UTC (permalink / raw)
To: git
Upcoming release 1.5.2 is nearing completion, so let's look at
the issues that are specifically excluded from it.
Before listing topics there is one thing.
* sp/cvsexport (Thu May 10 01:06:36 2007 +0200) 1 commit
+ Optimized cvsexportcommit: calling 'cvs status' once instead of
once per touched file.
This should really be 1.5.2. Real-world users of cvsexport, if
you were burned by this, please NAK as soon as possible. I'll
merge it to 1.5.2 unless I hear from anybody in a day or two.
The messages that follow this are:
[1/4] Easy-to-decide ones; what's been cooking in next.
[2/4] The ones to be cooked in next after 1.5.2
[3/4] Things we do not have code for yet.
[4/4] Leftover bits
^ permalink raw reply [flat|nested] 55+ messages in thread
* [1/4] What's not in 1.5.2 (have been cooking in next)
2007-05-16 22:47 [0/4] What's not in 1.5.2 (overview) Junio C Hamano
@ 2007-05-16 22:47 ` Junio C Hamano
2007-05-16 22:47 ` [2/4] What's not in 1.5.2 (will cook " Junio C Hamano
` (2 subsequent siblings)
3 siblings, 0 replies; 55+ messages in thread
From: Junio C Hamano @ 2007-05-16 22:47 UTC (permalink / raw)
To: git
Here are the first batch that will be in 'master' after 1.5.2
happens.
They all have been cooking in 'next', or were not compelling
enough feature enhancements to be included after -rc1.
* jb/statcolor (Sat May 5 16:48:54 2007 -0400) 1 commit
+ Add colour support in rebase and merge tree diff stats output.
* tt/gc (Wed May 9 15:48:39 2007 -0400) 1 commit
+ Add --aggressive option to 'git gc'
* np/pack (Wed May 9 14:42:42 2007 -0400) 3 commits
+ deprecate the new loose object header format
+ make "repack -f" imply "pack-objects --no-reuse-object"
+ allow for undeltified objects not to be reused.
* sv/checkout (Wed May 9 12:33:20 2007 +0200) 1 commit
+ git-update-ref: add --no-deref option for overwriting/detaching
ref
* mst/connect (Wed May 16 20:09:41 2007 +0300) 1 commit
+ connect: display connection progress
* dh/pack (Wed May 9 13:56:50 2007 -0700) 3 commits
+ Custom compression levels for objects and packs
+ make "repack -f" imply "pack-objects --no-reuse-object"
+ allow for undeltified objects not to be reused
^ permalink raw reply [flat|nested] 55+ messages in thread
* [2/4] What's not in 1.5.2 (will cook in next)
2007-05-16 22:47 [0/4] What's not in 1.5.2 (overview) Junio C Hamano
2007-05-16 22:47 ` [1/4] What's not in 1.5.2 (have been cooking in next) Junio C Hamano
@ 2007-05-16 22:47 ` Junio C Hamano
2007-05-16 22:47 ` [3/4] What's not in 1.5.2 (new topics) Junio C Hamano
2007-05-16 22:47 ` [4/4] What's not in 1.5.2 (other bits and pieces) Junio C Hamano
3 siblings, 0 replies; 55+ messages in thread
From: Junio C Hamano @ 2007-05-16 22:47 UTC (permalink / raw)
To: git
These have been cooking in 'pu'; will be in 'next' after 1.5.2
happens.
* db/remote (Tue May 15 22:50:19 2007 -0400) 5 commits
. Update local tracking refs when pushing
. Add handlers for fetch-side configuration of remotes.
. Move refspec parser from connect.c and cache.h to remote.{c,h}
. Move remote parsing into a library file out of builtin-push.
+ git-update-ref: add --no-deref option for overwriting/detaching
ref
This was rebased on to Sven's change to lock_any_ref_for_update();
* dh/repack (Sun May 13 12:47:09 2007 -0700) 9 commits
. git-repack --max-pack-size: add option parsing to enable feature
. git-repack --max-pack-size: split packs as asked by
write_{object,one}()
. git-repack --max-pack-size: write_{object,one}() respect pack
limit
. git-repack --max-pack-size: new file statics and code
restructuring
. Alter sha1close() 3rd argument to request flush only
+ Custom compression levels for objects and packs
+ deprecate the new loose object header format
+ make "repack -f" imply "pack-objects --no-reuse-object"
+ allow for undeltified objects not to be reused
This follows the "custom compression levels" series from the
same author.
^ permalink raw reply [flat|nested] 55+ messages in thread
* [3/4] What's not in 1.5.2 (new topics)
2007-05-16 22:47 [0/4] What's not in 1.5.2 (overview) Junio C Hamano
2007-05-16 22:47 ` [1/4] What's not in 1.5.2 (have been cooking in next) Junio C Hamano
2007-05-16 22:47 ` [2/4] What's not in 1.5.2 (will cook " Junio C Hamano
@ 2007-05-16 22:47 ` Junio C Hamano
2007-05-17 4:39 ` Andy Parkins
2007-05-16 22:47 ` [4/4] What's not in 1.5.2 (other bits and pieces) Junio C Hamano
3 siblings, 1 reply; 55+ messages in thread
From: Junio C Hamano @ 2007-05-16 22:47 UTC (permalink / raw)
To: git
Here are random things that I'd like to see happen during 1.5.3
cycle.
* git-clone should become a very thin wrapper around
init/remote/fetch/checkout.
- it may be necessary to teach git-remote about --bare
layout.
- by getting rid of 'fetch' logic from git-clone as much as
possible, it would hopefully become easier to freeze what
git-fetch needs to do and help rewriting the latter in C.
- update native protocol with an extension to carry which
branch HEAD (or any symref) points at, instead of guessing.
We already know this information when clone is done over
HTTP, but we are discarding that information in git-clone
for the sake of implementation simplicity and having it
also guess.
* more superproject support in Porcelain-ish.
- superproject support in Porcelain-ish is mostly about
checking things out. One possible scenario:
$ git clone --recursive $url_of_superproject
may instruct "clone that, and also clone any projects that
the superproject uses, and check everything out". I would
imagine that lThis would be carried out in the following
steps.
(1) The usual "git-clone" dance, determining the directory
name to create, running mkdir and init-db, setting up
tracking refspec specification in the config, and
running the initial fetch.
(2) Because the command was not given '-n' ("do not
checkout"), HEAD is checked out. git-checkout notices
that there are commits bound to some directories in its
tree.
(3) git-checkout finds there is .gitmodules file in the
tree (and the checked-out working file), which
describes these subprojects. It looks at the config
and notices that it does not yet know about them
(obviously this is true, as this is the first checkout
after clone, but I am trying to outline how checkout
after a merge should work in the general case).
It determines where to fetch that subproject from,
perhaps it uses the default URL described in
.gitmodules file to, while asking the user for
confirmation and giving the user a chance to override
it. And it records something in the config -- now that
project is known to this repository.
(4) git-checkout then calls git-clone recursively in that
subdirectory for the subproject (which may further
contain subprojects of its own, but that would
naturally work).
- Another scenario, after "git clone" of the superproject
_without_ the above "--recursive" behaviour. There needs
to be a way to later clone and checkout a named subproject
(and that subproject alone). Perhaps
$ git checkout --populate-subproject subdir
would notice that subdir corresponds to a subproject that
is "not known" to this repository.
I am assuming .gitmodules from the upstream describes it,
but the default is not to recurse into any subproject,
which would leave the subdir _without_ its own .git
directory. A subproject becomes "known" to your repository
when you tell git that you care about it (e.g. "clone
--recursive" above), and that decision would be recorded
somewhere in .git/config of the superproject. .gitmodules
would give the default URL and probably the branch to
follow. The URL definitely needs to be overridable by
per-repository configuration as network reachability would
be different for everybody; I am not sure about the need to
make it overridable which branch the subproject should
follow, but my gut feeling is that we do not have to.
Then it does the same as (3) and (4) in "clone --reference"
above (in fact, I am envisioning that that scenario would
call "git checkout --populate-subproject" in those steps).
- We might want to have a way to tell it to stop tracking an
already "known" subproject, which means that the section in
.git/config that would track the status of the subproject
(e.g. "is it known", "what's the URL", etc.) needs another
variable that says "are we still interested in it?".
- There may be obvious "frills" we would want to eventually
have, such as defaulting the repository to find the
subproject that corresponds to subdir/ to $URL/subdir (iow
if http://repo.or.cz/cgit.git binds git.git at its src/
directory, we would expect that the repository to house
that subproject is found at http://repo.or/cz/cgit.git/src
by default), but during the first round, I think it is
better to leave things explicit. So, for the above
example, instead of defaulting the $URL/$subdir location,
always require .gitmodules to say where to fetch the
subproject from.
- "git diff", "git status" and friends might want to learn
recursive behaviour. These should be much easier than any
of the above.
Note: I am not trying to dictate the overall superproject
Porcelain design should follow the above literally, but just
throwing out a strawman. As I do not expect to be a heavy
user of superproject support myself yet, other people who
have thought about the problem longer (much longer) than I
have will certainly have better ideas.
* Perhaps add 'tree' entries in the index. This may make the
current cache-tree extension unnecessary, and I suspect it
will simplify various paths that deal with D/F conflicts in
the current codebase.
I suspect this might need 1.6, as it is a one-way backward
incompatible change for the 'index', but 'index' is local so
it might not be such a big deal. In the worst case, when the
users find "git checkout" from 1.5.2 does not work in a
repository checked out with such an updated index format, we
could ask them to "rm -f .git/index && git checkout HEAD".
* make merge-recursive and read-tree -u more robust when D/F
conflict is involved.
I think that the use of current_{file,directory}_set is
misguided and it should just ask the index if there are
conflicts. unpack-trees.c::check_updates() logic probably is
the right place to deal with what to do with the working tree
when the merge result contains D/F conflicts (i.e.
merge-recursive wants to create file~branchname instead of
not touching the working tree).
^ permalink raw reply [flat|nested] 55+ messages in thread
* [4/4] What's not in 1.5.2 (other bits and pieces)
2007-05-16 22:47 [0/4] What's not in 1.5.2 (overview) Junio C Hamano
` (2 preceding siblings ...)
2007-05-16 22:47 ` [3/4] What's not in 1.5.2 (new topics) Junio C Hamano
@ 2007-05-16 22:47 ` Junio C Hamano
3 siblings, 0 replies; 55+ messages in thread
From: Junio C Hamano @ 2007-05-16 22:47 UTC (permalink / raw)
To: git
Here are the leftover pieces I have in todo:TODO file that I did
not mention in the earlier messages. I left them out from the
third message of this series, as (1) some are more of "trivial
fix" category, and (2) others are heavier and would probably not
fit for a single release cycle such as 1.5.3.
The easier ones
---------------
* parse-remote.sh has POSIXLY incorrect shell construct.
Message-ID: <20070505080313.GA12170@gondor.apana.org.au>
* Use 'git diff' not 'git diff-tree' in merge and rebase
From: James Bowes <jbowes@dangerouslyinc.com>
Message-ID: <1178398134288-git-send-email-jbowes@dangerouslyinc.com>
* gitk --left-right
From: Linus Torvalds <torvalds@linux-foundation.org>
Message-ID: <alpine.LFD.0.98.0705051524300.17381@woody.linux-foundation.org>
From: Junio C Hamano <junkio@cox.net>
Message-ID: <7vabwifl23.fsf@assigned-by-dhcp.cox.net>
* Handling pushing into non-bare repository more gracefully.
When git-push is done to a non-bare repository and updates the
branch that is currently checked out, we currently do not do
anything special.
From: Linus Torvalds <torvalds@linux-foundation.org>
Message-ID: <Pine.LNX.4.64.0704160931550.5473@woody.linux-foundation.org>
* git-daemon bug?
From: Franck Bui-Huu <vagabon.xyz@gmail.com>
Message-ID: <450EABD0.1040102@innova-card.com>
Repeated requests against git-daemon makes it stuck under --syslog
[jc: does not reproduce easily for me; has anybody seen it?]
* AsciiDoc 8 would break our documentation.
From: Stefan Richter <stefanr@s5r6.in-berlin.de>
Message-ID: <4523EC14.6070806@s5r6.in-berlin.de>
AsciiDoc 8 does not grok documents written for AsciiDoc 7 out of
the box.
[jc: limbo?]
* Delegate gitweb part to somebody else.
* Use gitattributes for more things.
- 'precious' files that are not tracked but not
build-products. Currently people seem to put them in
.gitignore, but that is not quite right, as .gitignore is
meant for ignoring things that can be lost (build products,
editor backup files). "git clean -x" and "git checkout" to
another branch that has a file where the current branch has a
directory could lose such 'precious' files.
- Customized "diff -p" markers per path (Johannes, on #git
2007-04-30).
I think it makes sense to give an extra parameter to xdiff
machinery to affect how "diff -p" markers are constructed (as
opposed to teach xdiff machinery to read gitattributes -- the
code does not have path information at that level). The
simplest interface would be to pass a regexp and have the
existing code always look for that regexp backwards. A more
complex one would involve a callback function, but I do not
know if that kind of complexity is worth it.
- Others???
* upload-pack support for start fetching from any valid point on
the history, not just published refs. (Erik W. Biederman
<m164jc9ekx.fsf@ebiederm.dsl.xmission.com>)
* Give --stdin to git-log, similar to git-rev-list
From: "Marco Costalba" <mcostalba@gmail.com>
Message-ID: <e5bfff550705110413q28aef3d8k3aeb0d342eeb2016@mail.gmail.com>
* Update the lockfile protocol so that closing and renaming are
done inside lockfile commit time. Some filesystems do not
like an open file renamed and then closed. Come up with a
patch and pass Alex for an Ack.
Probably not so important ones
------------------------------
* daemon --strict-symlink.
* Maybe grok PGP signed text/plain in applymbox as well.
* Mbx (not mbox) support for git-mailsplit.
* git-proxy should be spawned with sh -c 'command' $1 $2.
[jc: should it? -- deciding if it should may not be "trivial",
but if it turns out to be the right thing to do, the change
itself is trivial.]
* Maybe a true git-proxy command that reads the first request
pkt-line, and redirects the request to its real destination.
* test scripts for the relative directory path stuff.
The heavier ones
----------------
* Use blame machinery to track a single file (not path) in a finer
grained way.
From: Linus Torvalds <torvalds@linux-foundation.org>
Message-ID: <alpine.LFD.0.98.0704201554550.9964@woody.linux-foundation.org>
[jc: I have a fixed-up one parked in 'pu' and also outlined what
other things I think are needed in my response:
Message-ID: <7vwt06wqv8.fsf@assigned-by-dhcp.cox.net>
]
* "git fetch" should be able to use foreign SCM import backends
such as svnimport and cvsimport.
* git-clone fails .git/refs/foo (Yann Dirson <ydirson@altern.org>)
<20060610225040.GA7766@nowhere.earth>
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-16 22:47 ` [3/4] What's not in 1.5.2 (new topics) Junio C Hamano
@ 2007-05-17 4:39 ` Andy Parkins
2007-05-17 5:21 ` Junio C Hamano
[not found] ` <200705181524.40705.Josef.Weidendorfer@gmx.de>
0 siblings, 2 replies; 55+ messages in thread
From: Andy Parkins @ 2007-05-17 4:39 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano
On Wednesday 2007, May 16, Junio C Hamano wrote:
> (3) git-checkout finds there is .gitmodules file in the
> tree (and the checked-out working file), which
> describes these subprojects. It looks at the config
> and notices that it does not yet know about them
> (obviously this is true, as this is the first checkout
> after clone, but I am trying to outline how checkout
> after a merge should work in the general case).
>
> It determines where to fetch that subproject from,
> perhaps it uses the default URL described in
> .gitmodules file to, while asking the user for
> confirmation and giving the user a chance to override
> it. And it records something in the config -- now that
> project is known to this repository.
I've been thinking about this .gitmodules thing and have a concern.
Aren't we falling into the svn:externals trap?
The svn:externals property is analagous to our .gitmodules file. svn
properties were basically just version controlled out-of-tree meta data
(making them annoying to work with - in-tree is better).
svn "submodule" support was done by writing something like
subproject svn://host/blah/blah
In the svn:externals property attached to the directory that
the "subproject" directory was in. To translate:
svn propset svn:externals "subproject svn://blah/blah/blah" .
git clone git://blah/blah/blah subproject
git add subproject
The hole that this sort of thing gets you in to is that the
svn:externals property is version controlled. Time passes since you
added the external; in that time the URL becomes invalid. No problem,
you simply change the svn:externals property. KABOOM. Now any
historical checkout fails because it checks out the svn:externals
property from that checkout and tries to use the wrong URL.
Our in-tree .gitmodules will have the same problem. I recognise that
you've mitigated that with some "confirm with the user, store in the
config" hand waving; but that is just hiding the problem: the submodule
URL is not something that should be version controlled; it is an
all-of-history property; when it changes for revision N it changes for
revision N-1, N-2, N-3, etc. Storing it in .gitmodules implies that
it's value in the past has meaning - it doesn't.
You mentioned yourself that that problem is not confined to the temporal
accuracy of .gitmodules, there is spatial accuracy too - there is no
guarantee that user A wants to use the same submodule URL as user B.
Fast forward to when we've got submodule support; let's say you start
using it for git-gui (for example). Somehow (let's leave the "how"
till later) I've gotten a working git tree with a git-gui checked out.
I go to my laptop and clone that repository (note: NOT the upstream
repository). When git-clone hits the git-gui submodule it should not
go looking for the upstream git-gui, I will want it to clone my local
git-gui submodule. i.e. in-tree .gitmodules URL for git-gui will be
wrong.
I hope the above shows that in-tree .gitmodules is wrong; it can only
ever be a hint, and in a great number of cases it will be an incorrect
hint.
I know it's so enticing to store it in-tree; it would be great because
the normal repository object transfer mechanism would get the URL of
the submodule to the receiver with no changes to current
infrastructure. I say: tough luck - we need another mechanism. The
submodule URL is a per-repository setting, not a per-project setting.
When fetching, some out-of-band mechanism for telling the other side
what URL _this_ repository thinks the submodule is at needs to be
supplied. I don't know what space there is in the git protocol for
putting that information, but I suspect that that is where it needs to
go.
As an alternative to that, the supermodule could be given the ability to
proxy for the submodule during clone. It knows where the submodule is
stored from it's point of view; is there scope for doing a
virtual-server-like system were the supermodule git-daemon just changes
to the submodule repository (in the case it is local) and thereby gives
the downstream git access to the submodule without it even needing a
URL.
> * Perhaps add 'tree' entries in the index. This may make the
> current cache-tree extension unnecessary, and I suspect it
> will simplify various paths that deal with D/F conflicts in
> the current codebase.
>
> I suspect this might need 1.6, as it is a one-way backward
> incompatible change for the 'index', but 'index' is local so
> it might not be such a big deal. In the worst case, when the
> users find "git checkout" from 1.5.2 does not work in a
> repository checked out with such an updated index format, we
> could ask them to "rm -f .git/index && git checkout HEAD".
I don't think even that would be necessary. Assuming that the new index
format is a superset of the old index format the only way that tree
entries would get in the index would be by using git-1.6. Almost by
definition then, if they are in there your git is up-to-date enough to
use them. (modulo me not really understanding what you mean)
Andy
--
Dr Andy Parkins, M Eng (hons), MIET
andyparkins@gmail.com
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 4:39 ` Andy Parkins
@ 2007-05-17 5:21 ` Junio C Hamano
2007-05-17 7:51 ` Andy Parkins
` (3 more replies)
[not found] ` <200705181524.40705.Josef.Weidendorfer@gmx.de>
1 sibling, 4 replies; 55+ messages in thread
From: Junio C Hamano @ 2007-05-17 5:21 UTC (permalink / raw)
To: Andy Parkins; +Cc: git
Andy Parkins <andyparkins@gmail.com> writes:
> Our in-tree .gitmodules will have the same problem. I recognise that
> you've mitigated that with some "confirm with the user, store in the
> config" hand waving; but that is just hiding the problem: the submodule
> URL is not something that should be version controlled; it is an
> all-of-history property; when it changes for revision N it changes for
> revision N-1, N-2, N-3, etc. Storing it in .gitmodules implies that
> it's value in the past has meaning - it doesn't.
I think that depends _WHY_ the URL recorded .gitmodules are
updated. It would perfectly be reasonable for release #1 of an
appliance project to bind linux 2.4 tree at kernel/ subdirectory
while release #2 source to have 2.6 one; they come from two
different repository URLs. When you seek the superproject back
to release #1, you would still want to fetch from 2.4 upstream
if you are updating.
If the URL is changed only because the logically same project
was relocated to different hosting service, then what you say is
true.
What I was "handwaving" (or "envisioning") was to have something
like this in .gitmodules:
[subproject "kernel/"]
URL = git://git.kernel.org/pub/linux-2.4.git
(or 2.6, depending on the revision of the superproject) and per
repository configuration would maps this with these two entries:
[subproject "git://git.kernel.org/pub/linux-2.4.git"]
URL = http://www.kernel.org/pub/linux-2.4.git
[subproject "git://git.kernel.org/pub/linux-2.6.git"]
URL = http://www.kernel.org/pub/linux-2.6.git
The intent is
(1) "kernel/" directory is found to be a gitlink in the
tree/index; .gitmodules is consulted to find the
"URL", which is just a handle and the initial hint
(2) That "initial hint" is used to look up the
subproject entry from the configuration, to find the
"real" URL that is used by this repository
> You mentioned yourself that that problem is not confined to the temporal
> accuracy of .gitmodules, there is spatial accuracy too - there is no
> guarantee that user A wants to use the same submodule URL as user B.
which hopefully is already answered by the above handwaving ;-).
The case of "relocated to different hosting site" would also be
solved by having more than one entries in the configuration
file. If a project that used to be hosted at git.or.cz has
migrated to git.sf.net, its .gitmodules file from an earlier
revision would have URL pointing at git.repo.cz and newer ones
would point at git.sf.net. If you started following that
project before the migration, you would have:
[subproject "git://git.or.cz/sub.git"]
URL = git://git.or.cz/sub.git
in your .git/config. After the repository migrates to
git.sf.net, you would update that existing entry and also add
another entry, so that .git/config would have these two entries:
[subproject "git://git.or.cz/sub.git"]
URL = git://git.sf.net/sub.git
[subproject "git://git.sf.net/sub.git"]
URL = git://git.sf.net/sub.git
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 5:21 ` Junio C Hamano
@ 2007-05-17 7:51 ` Andy Parkins
2007-05-17 11:02 ` Alex Riesen
` (2 subsequent siblings)
3 siblings, 0 replies; 55+ messages in thread
From: Andy Parkins @ 2007-05-17 7:51 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano
On Thursday 2007 May 17, Junio C Hamano wrote:
> I think that depends _WHY_ the URL recorded .gitmodules are
> updated. It would perfectly be reasonable for release #1 of an
> appliance project to bind linux 2.4 tree at kernel/ subdirectory
> while release #2 source to have 2.6 one; they come from two
> different repository URLs. When you seek the superproject back
> to release #1, you would still want to fetch from 2.4 upstream
> if you are updating.
That's a very good point; I hadn't considered that there was a case for
recording a change.
> What I was "handwaving" (or "envisioning") was to have something
> like this in .gitmodules:
Sorry, "handwaving" was a bit rude - I certainly didn't mean that you weren't
supplying sufficient detail for the circumstance; I meant that in the sense
of the tricky bits being papered over with user overrides and questions about
which URL to /really/ use. The fact that you even felt it necessary to
mention those overrides signals, I think, that something is wrong.
> [subproject "kernel/"]
> URL = git://git.kernel.org/pub/linux-2.4.git
>
> (or 2.6, depending on the revision of the superproject) and per
> repository configuration would maps this with these two entries:
So now - running with your example - I'm in a project with a 2.6 URL
in .gitmodules and config; now I check out a past revision. .gitmodules is
updated to show the URL at that time (2.4) - what happens to config, which
must have higher precedence? Am I meant to update that myself? So, as I hop
around between branches you expect that I will be updating the config file
for each checkout?
> [subproject "git://git.kernel.org/pub/linux-2.4.git"]
> URL = http://www.kernel.org/pub/linux-2.4.git
>
> [subproject "git://git.kernel.org/pub/linux-2.6.git"]
> URL = http://www.kernel.org/pub/linux-2.6.git
Now this part I love. _That_ is a proper solution. To me though, these are a
completely different category from the [subproject] above. I think that
should be highlighted with a different section name like "[urlmap]".
> The intent is
>
> (1) "kernel/" directory is found to be a gitlink in the
> tree/index; .gitmodules is consulted to find the
> "URL", which is just a handle and the initial hint
In which case that [subproject "kernel/"] section is not needed (I think it
would be better to simply say "URL not found for submodule kernel/" or
something if there is no .gitmodules rather than supplying that override).
> (2) That "initial hint" is used to look up the
> subproject entry from the configuration, to find the
> "real" URL that is used by this repository
Yes. Excellent; the "hint" now becomes a lookup key into the url mappings.
> which hopefully is already answered by the above handwaving ;-).
Absolutely. I'm very impressed. It solves both the temporal and spatial
changes problem because one can remap every URL that was ever used in the
history of the .gitmodules file if one wanted.
> in your .git/config. After the repository migrates to
> git.sf.net, you would update that existing entry and also add
> another entry, so that .git/config would have these two entries:
>
> [subproject "git://git.or.cz/sub.git"]
> URL = git://git.sf.net/sub.git
>
> [subproject "git://git.sf.net/sub.git"]
> URL = git://git.sf.net/sub.git
I don't suppose the second one is needed; wouldn't the default be $key = $url,
when no override is found?
This also raises the point that these mappings would probably be
order-dependent; because it may be that I want to do:
[subproject "git://git.or.cz/sub.git"]
URL = git://git.sf.net/sub.git
[subproject "git://git.sf.net/sub.git"]
URL = /home/andyp/git/mycopyofsub.git
In conclusion: I think that's a first class solution to the problem (and
probably what you had in mind all along, and me screaming around wasn't
helpful :-)).
Andy
--
Dr Andy Parkins, M Eng (hons), MIET
andyparkins@gmail.com
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 5:21 ` Junio C Hamano
2007-05-17 7:51 ` Andy Parkins
@ 2007-05-17 11:02 ` Alex Riesen
2007-05-17 12:46 ` Petr Baudis
2007-05-17 18:47 ` Junio C Hamano
2007-05-17 13:45 ` Nicolas Pitre
2007-05-17 21:58 ` Michael S. Tsirkin
3 siblings, 2 replies; 55+ messages in thread
From: Alex Riesen @ 2007-05-17 11:02 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Andy Parkins, git
Junio C Hamano, Thu, May 17, 2007 07:21:40 +0200:
> What I was "handwaving" (or "envisioning") was to have something
> like this in .gitmodules:
>
> [subproject "kernel/"]
> URL = git://git.kernel.org/pub/linux-2.4.git
So, assuming .gitmodules is versioned (afaics, it is), it would mean
that after a some unlucky git-pull, where someone changed the upstream
.gitmodules ("linux-2.4" for whatever reason is changed to just
"linux"). And suddenly all such local configuration is useless:
> (or 2.6, depending on the revision of the superproject) and per
> repository configuration would maps this with these two entries:
>
> [subproject "git://git.kernel.org/pub/linux-2.4.git"]
> URL = http://www.kernel.org/pub/linux-2.4.git
>
> [subproject "git://git.kernel.org/pub/linux-2.6.git"]
isn't there a typo somewhere around "2.6"?
> URL = http://www.kernel.org/pub/linux-2.6.git
because there is no URL to map from.
why can't I just have _repo_ configuration:
[subproject "kernel/"]
URL = http://www.kernel.org/pub/linux-2.6.git
?
It can be first-time cloned from the upstream, but it stays after
people change it to suit their systems. They can depend on it not to
be broken by upstream.
> The intent is
>
> (1) "kernel/" directory is found to be a gitlink in the
> tree/index; .gitmodules is consulted to find the
> "URL", which is just a handle and the initial hint
>
> (2) That "initial hint" is used to look up the
> subproject entry from the configuration, to find the
> "real" URL that is used by this repository
It is quite long-living to be just initial hint. And will be redundant
after the hint loses all meaning (after some time it _will_ happen,
sites do move around), and is just a strange looking mapping key.
Can I suggest a part of repo configuration to be clonable? So that
there is a something in .git/config.dist, which is _cloned_ with
git-clone. The obviuos thing to put there would be subproject
configuration, and maybe there will be something else in the future
(I'd think of description, which is a separate file now, and as for
now, the only way to get this description is to use gitweb or ssh).
git-ls-remote could be made to show this "remote-accessible"
configuration, in case someone have to update/compare local copy of
this config.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 11:02 ` Alex Riesen
@ 2007-05-17 12:46 ` Petr Baudis
2007-05-17 13:46 ` Jeff King
2007-05-17 18:47 ` Junio C Hamano
1 sibling, 1 reply; 55+ messages in thread
From: Petr Baudis @ 2007-05-17 12:46 UTC (permalink / raw)
To: Alex Riesen; +Cc: Junio C Hamano, Andy Parkins, git
On Thu, May 17, 2007 at 01:02:25PM CEST, Alex Riesen wrote:
> why can't I just have _repo_ configuration:
>
> [subproject "kernel/"]
> URL = http://www.kernel.org/pub/linux-2.6.git
> ?
> It can be first-time cloned from the upstream, but it stays after
> people change it to suit their systems. They can depend on it not to
> be broken by upstream.
Because kernel/ can get removed, moved around, or point at entirely
*different* projects over time and branches - kernel/ can switch from
linux-2.4 to linux-2.6, libc/ can switch between glibc and uClibc, ...
> Can I suggest a part of repo configuration to be clonable? So that
> there is a something in .git/config.dist, which is _cloned_ with
> git-clone. The obviuos thing to put there would be subproject
> configuration, and maybe there will be something else in the future
> (I'd think of description, which is a separate file now, and as for
> now, the only way to get this description is to use gitweb or ssh).
> git-ls-remote could be made to show this "remote-accessible"
> configuration, in case someone have to update/compare local copy of
> this config.
This is troublesome because then you will also need a way to update the
configuration in the future, otherwise you will run into some
embarassing situations, and since we don't even support any motds while
fetching, when something *needs* to be changed you don't even have a
good way to tell your users. (Actually, I've been thinking about adding
motd support to the fetchers. :-)
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Ever try. Ever fail. No matter. // Try again. Fail again. Fail better.
-- Samuel Beckett
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 5:21 ` Junio C Hamano
2007-05-17 7:51 ` Andy Parkins
2007-05-17 11:02 ` Alex Riesen
@ 2007-05-17 13:45 ` Nicolas Pitre
2007-05-17 21:58 ` Michael S. Tsirkin
3 siblings, 0 replies; 55+ messages in thread
From: Nicolas Pitre @ 2007-05-17 13:45 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Andy Parkins, git
On Wed, 16 May 2007, Junio C Hamano wrote:
> Andy Parkins <andyparkins@gmail.com> writes:
>
> > Our in-tree .gitmodules will have the same problem. I recognise that
> > you've mitigated that with some "confirm with the user, store in the
> > config" hand waving; but that is just hiding the problem: the submodule
> > URL is not something that should be version controlled; it is an
> > all-of-history property; when it changes for revision N it changes for
> > revision N-1, N-2, N-3, etc. Storing it in .gitmodules implies that
> > it's value in the past has meaning - it doesn't.
>
> I think that depends _WHY_ the URL recorded .gitmodules are
> updated. It would perfectly be reasonable for release #1 of an
> appliance project to bind linux 2.4 tree at kernel/ subdirectory
> while release #2 source to have 2.6 one; they come from two
> different repository URLs. When you seek the superproject back
> to release #1, you would still want to fetch from 2.4 upstream
> if you are updating.
I don't know if the above example should make sense. In practice that
would mean you'll have to _replace_ the repo within the submodule
directory which is quite different from merely checking out a different
version of the same repository.
Nicolas
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 12:46 ` Petr Baudis
@ 2007-05-17 13:46 ` Jeff King
2007-05-17 16:10 ` Petr Baudis
2007-05-17 18:49 ` Junio C Hamano
0 siblings, 2 replies; 55+ messages in thread
From: Jeff King @ 2007-05-17 13:46 UTC (permalink / raw)
To: Petr Baudis; +Cc: Alex Riesen, Junio C Hamano, Andy Parkins, git
On Thu, May 17, 2007 at 02:46:22PM +0200, Petr Baudis wrote:
> > why can't I just have _repo_ configuration:
> >
> > [subproject "kernel/"]
> > URL = http://www.kernel.org/pub/linux-2.6.git
> > ?
> > It can be first-time cloned from the upstream, but it stays after
> > people change it to suit their systems. They can depend on it not to
> > be broken by upstream.
>
> Because kernel/ can get removed, moved around, or point at entirely
> *different* projects over time and branches - kernel/ can switch from
> linux-2.4 to linux-2.6, libc/ can switch between glibc and uClibc, ...
I think we clearly need a 2-level system: a tracked pointer to the repo,
with an optional local override.
However, I don't quite like Junio's idea of using the URL as a key,
since it is intended to change. IOW, if I am overriding your URL via
.git/config, if you change your URL then my config is now broken.
Instead, why not:
1. url location is supplied in configuration as
[subproject "kernel/"]
url = git://git.kernel.org/pub/linux-2.4.git
2. .gitmodules is simply read as a lower-priority version of
configuration
One advantage of this approach is that it's totally general; instead of
.gitmodules, we could in fact be talking about .gitconfig, a mechanism
for projects to contain tracked configuration that can be overridden by
individual repos. For some projects, I imagine some of the commit
encoding config options might make sense.
Thoughts?
-Peff
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 13:46 ` Jeff King
@ 2007-05-17 16:10 ` Petr Baudis
2007-05-17 16:25 ` Jeff King
2007-05-17 18:49 ` Junio C Hamano
1 sibling, 1 reply; 55+ messages in thread
From: Petr Baudis @ 2007-05-17 16:10 UTC (permalink / raw)
To: Jeff King; +Cc: Alex Riesen, Junio C Hamano, Andy Parkins, git
On Thu, May 17, 2007 at 03:46:49PM CEST, Jeff King wrote:
> On Thu, May 17, 2007 at 02:46:22PM +0200, Petr Baudis wrote:
>
> > > why can't I just have _repo_ configuration:
> > >
> > > [subproject "kernel/"]
> > > URL = http://www.kernel.org/pub/linux-2.6.git
> > > ?
> > > It can be first-time cloned from the upstream, but it stays after
> > > people change it to suit their systems. They can depend on it not to
> > > be broken by upstream.
> >
> > Because kernel/ can get removed, moved around, or point at entirely
> > *different* projects over time and branches - kernel/ can switch from
> > linux-2.4 to linux-2.6, libc/ can switch between glibc and uClibc, ...
>
> I think we clearly need a 2-level system: a tracked pointer to the repo,
> with an optional local override.
>
> However, I don't quite like Junio's idea of using the URL as a key,
> since it is intended to change. IOW, if I am overriding your URL via
> .git/config, if you change your URL then my config is now broken.
>
> Instead, why not:
> 1. url location is supplied in configuration as
> [subproject "kernel/"]
> url = git://git.kernel.org/pub/linux-2.4.git
> 2. .gitmodules is simply read as a lower-priority version of
> configuration
But, did you read what you actually quoted? Because I can only repeat my
argument in the face of (1), and you didn't seem to dispute any part of
it at all.
"kernel/" has _no_ meaning. Only a (treeid,"kernel/") pair has meaning,
nothing less - a particular tree contains a submodule in given subtree.
Different trees can have different submodules in different subtrees.
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Ever try. Ever fail. No matter. // Try again. Fail again. Fail better.
-- Samuel Beckett
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 16:10 ` Petr Baudis
@ 2007-05-17 16:25 ` Jeff King
2007-05-17 17:30 ` Petr Baudis
0 siblings, 1 reply; 55+ messages in thread
From: Jeff King @ 2007-05-17 16:25 UTC (permalink / raw)
To: Petr Baudis; +Cc: Alex Riesen, Junio C Hamano, Andy Parkins, git
On Thu, May 17, 2007 at 06:10:02PM +0200, Petr Baudis wrote:
> But, did you read what you actually quoted? Because I can only repeat my
> argument in the face of (1), and you didn't seem to dispute any part of
> it at all.
You said:
> Because kernel/ can get removed, moved around, or point at entirely
> *different* projects over time and branches - kernel/ can switch from
> linux-2.4 to linux-2.6, libc/ can switch between glibc and uClibc, ...
which I took to mean that we must be able to track changes to the URL
which is pointed to by the kernel/ submodule, and therefore this
configuration must be in a tracked file. Which is _precisely_ what I
advocated: it goes in a .gitmodules (or .gitconfig) file in the tracked
directory. This is counter to what Alex says, which is that one should
simply pull the config down during clone time and never change it.
However, I think we _must_ have an override mechanism, since I don't
necessarily use the same URLs that you do. I propose that such overrides
should go into the local repo config. The only difference between what I
have proposed and what Junio mentioned is that I would base the config
override key on the directory name, not the URL. This means that if
upstream changes their pointer to the URL, yours will change with it
_unless you have an override_. With Junio's, their change of URL will
override your change (since the key will no longer match your config).
How do you propose to handle overrides?
> "kernel/" has _no_ meaning. Only a (treeid,"kernel/") pair has meaning,
> nothing less - a particular tree contains a submodule in given subtree.
> Different trees can have different submodules in different subtrees.
Right. In my proposal (unlike Alex's), it _is_ tied to the tree, since
that tree has a particular .gitmodules. But I also think you should be
able to override the submodule URL for kernel/ _for all time_ if you
want.
-Peff
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 16:25 ` Jeff King
@ 2007-05-17 17:30 ` Petr Baudis
2007-05-17 17:35 ` Jeff King
0 siblings, 1 reply; 55+ messages in thread
From: Petr Baudis @ 2007-05-17 17:30 UTC (permalink / raw)
To: Jeff King; +Cc: Alex Riesen, Junio C Hamano, Andy Parkins, git
On Thu, May 17, 2007 at 06:25:42PM CEST, Jeff King wrote:
> However, I think we _must_ have an override mechanism, since I don't
> necessarily use the same URLs that you do. I propose that such overrides
> should go into the local repo config. The only difference between what I
> have proposed and what Junio mentioned is that I would base the config
> override key on the directory name, not the URL. This means that if
> upstream changes their pointer to the URL, yours will change with it
> _unless you have an override_. With Junio's, their change of URL will
> override your change (since the key will no longer match your config).
>
> How do you propose to handle overrides?
I think Junio's URL keying works fine. Their change of URL will override
your change, but that is bad thing only when the old upstream's URL
changed, but the upstream stays the same. Then either the problem is
clearly visible or it will result only in somewhat suboptimal behaviour.
OTOH, if the _upstream_ changed and your override scheme is at work, you
won't notice at all and simply will continue to use the same old
upstream.
> > "kernel/" has _no_ meaning. Only a (treeid,"kernel/") pair has meaning,
> > nothing less - a particular tree contains a submodule in given subtree.
> > Different trees can have different submodules in different subtrees.
>
> Right. In my proposal (unlike Alex's), it _is_ tied to the tree, since
> that tree has a particular .gitmodules. But I also think you should be
> able to override the submodule URL for kernel/ _for all time_ if you
> want.
But again - "kernel/" means nothing, only "kernel/ in tree X". kernel/
might point to linux-2.4 in older trees, linux-2.6 in newer trees, -mm
in the experimental branch and freebsd tree in the weirdo branch. Such
an override is _never_ going to work in the general situation, only when
"kernel/" always in all commits on all branches points to the same
single project. (You can work that around by at least making the setting
branch-specific, but that still doens't take into account the history,
and then newly created branches won't have the override you want, etc.)
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Ever try. Ever fail. No matter. // Try again. Fail again. Fail better.
-- Samuel Beckett
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 17:30 ` Petr Baudis
@ 2007-05-17 17:35 ` Jeff King
0 siblings, 0 replies; 55+ messages in thread
From: Jeff King @ 2007-05-17 17:35 UTC (permalink / raw)
To: Petr Baudis; +Cc: Alex Riesen, Junio C Hamano, Andy Parkins, git
On Thu, May 17, 2007 at 07:30:05PM +0200, Petr Baudis wrote:
> I think Junio's URL keying works fine. Their change of URL will override
> your change, but that is bad thing only when the old upstream's URL
> changed, but the upstream stays the same. Then either the problem is
> clearly visible or it will result only in somewhat suboptimal behaviour.
>
> OTOH, if the _upstream_ changed and your override scheme is at work, you
> won't notice at all and simply will continue to use the same old
> upstream.
Right. But I think it makes more sense for the error condition to go the
other way (that is, your override might get stale, but it will always be
an _override_). You'll notice eventually anyway when upstream moves to a
commit sha1 that you don't have in your submodule repo (or if they never
do, that means your override tree actually _is_ valid, and didn't need
to be changed anyway; this would be the case if upstream moved to a
different mirror, but you were already using an alternate source
anyway).
> But again - "kernel/" means nothing, only "kernel/ in tree X". kernel/
> might point to linux-2.4 in older trees, linux-2.6 in newer trees, -mm
> in the experimental branch and freebsd tree in the weirdo branch. Such
> an override is _never_ going to work in the general situation, only when
> "kernel/" always in all commits on all branches points to the same
> single project. (You can work that around by at least making the setting
> branch-specific, but that still doens't take into account the history,
> and then newly created branches won't have the override you want, etc.)
My point is that we _already_ have a mechanism that unambiguously points
to the linked commit, and it's _not_ the URL; it's the commit sha1
embedded in the tree. Everything else is just a hint about where we
might find that commit.
-Peff
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 11:02 ` Alex Riesen
2007-05-17 12:46 ` Petr Baudis
@ 2007-05-17 18:47 ` Junio C Hamano
1 sibling, 0 replies; 55+ messages in thread
From: Junio C Hamano @ 2007-05-17 18:47 UTC (permalink / raw)
To: Alex Riesen; +Cc: Andy Parkins, git
Alex Riesen <raa.lkml@gmail.com> writes:
> Junio C Hamano, Thu, May 17, 2007 07:21:40 +0200:
>> What I was "handwaving" (or "envisioning") was to have something
>> like this in .gitmodules:
>>
>> [subproject "kernel/"]
>> URL = git://git.kernel.org/pub/linux-2.4.git
>
> So, assuming .gitmodules is versioned (afaics, it is), it would mean
> that after a some unlucky git-pull, where someone changed the upstream
> .gitmodules ("linux-2.4" for whatever reason is changed to just
> "linux"). And suddenly all such local configuration is useless:
See below.
>> (or 2.6, depending on the revision of the superproject) and per
>> repository configuration would maps this with these two entries:
>>
>> [subproject "git://git.kernel.org/pub/linux-2.4.git"]
>> URL = http://www.kernel.org/pub/linux-2.4.git
>>
>> [subproject "git://git.kernel.org/pub/linux-2.6.git"]
>
> isn't there a typo somewhere around "2.6"?
>
>> URL = http://www.kernel.org/pub/linux-2.6.git
>
> because there is no URL to map from.
The basic idea is that you keep mappings for all the URLs that
appear in versions of .gitmodules in the history you are
interested in checking out. If the upstream switches from 2.4
based one to 2.6 based one, .gitmodules would contain a new URL,
which is not yet known to your configuration. Then either the
UI would ask, with the default hint in the .gitmodules you just
pulled, refuse and have you manually add it to your config after
confirming, or just take the default (iow "trust the upstream").
So, no, it is not a reason to drop older mappings when your tip
was updated by a pull. It should still be possible to checkout
older version that depend on the older 2.4 based subproject.
> why can't I just have _repo_ configuration:
>
> [subproject "kernel/"]
> URL = http://www.kernel.org/pub/linux-2.6.git
> ?
> It can be first-time cloned from the upstream, but it stays after
> people change it to suit their systems. They can depend on it not to
> be broken by upstream.
But that is a wrong thing to do when you are forking from the
release #1 of the appliance project, which wanted to have 2.4
based on at that path.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 13:46 ` Jeff King
2007-05-17 16:10 ` Petr Baudis
@ 2007-05-17 18:49 ` Junio C Hamano
2007-05-18 12:58 ` Jeff King
1 sibling, 1 reply; 55+ messages in thread
From: Junio C Hamano @ 2007-05-17 18:49 UTC (permalink / raw)
To: Jeff King; +Cc: Petr Baudis, Alex Riesen, Andy Parkins, git
Jeff King <peff@peff.net> writes:
> Instead, why not:
> 1. url location is supplied in configuration as
> [subproject "kernel/"]
> url = git://git.kernel.org/pub/linux-2.4.git
> 2. .gitmodules is simply read as a lower-priority version of
> configuration
That does not support seeking back and forth between appliance
release #1 and release #2 which wants to say they want to bind
two different things at the same kernel/ path, does it?
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 5:21 ` Junio C Hamano
` (2 preceding siblings ...)
2007-05-17 13:45 ` Nicolas Pitre
@ 2007-05-17 21:58 ` Michael S. Tsirkin
2007-05-17 23:41 ` Josef Weidendorfer
3 siblings, 1 reply; 55+ messages in thread
From: Michael S. Tsirkin @ 2007-05-17 21:58 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Andy Parkins, git
> What I was "handwaving" (or "envisioning") was to have something
> like this in .gitmodules:
>
> [subproject "kernel/"]
> URL = git://git.kernel.org/pub/linux-2.4.git
>
> (or 2.6, depending on the revision of the superproject) and per
> repository configuration would maps this with these two entries:
>
> [subproject "git://git.kernel.org/pub/linux-2.4.git"]
> URL = http://www.kernel.org/pub/linux-2.4.git
>
> [subproject "git://git.kernel.org/pub/linux-2.6.git"]
> URL = http://www.kernel.org/pub/linux-2.6.git
>
> The intent is
>
> (1) "kernel/" directory is found to be a gitlink in the
> tree/index; .gitmodules is consulted to find the
> "URL", which is just a handle and the initial hint
>
> (2) That "initial hint" is used to look up the
> subproject entry from the configuration, to find the
> "real" URL that is used by this repository
I'm reading up on submodules, two questions on this:
1. I understand the usefulness of the hint for public repositories, (the user might
need help discovering where to get submodules) but for private ones would this
create a hassle: I start with a subproject in ~/subprojecttest and if that gets
put in the URL hint, I have to maintain a map for ~/subprojecttest in my
.git/config forever even after I move it to ~/subprojectproduction, just to make
old releases build?
Do you think it might make sense to support a mode where .gitmodules
is empty, and URLs come from the config directly?
2. Suppose .gitmodules in upstream tree points at subproject repo at kernel.org,
and I clone from there - my repo will point at kernel.org by default?
But now, I'd like everyone who clones from *my* repo to get
pointed at *my* server by default (e.g. for mirroring),
but would not changing .gitmodules create a commit so my
head will now differ from upstream - so it won't be signed properly etc...
Did I misunderstand something?
--
MST
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 21:58 ` Michael S. Tsirkin
@ 2007-05-17 23:41 ` Josef Weidendorfer
2007-05-18 0:32 ` Steven Grimm
2007-05-18 7:57 ` [3/4] What's not in 1.5.2 (new topics) Andy Parkins
0 siblings, 2 replies; 55+ messages in thread
From: Josef Weidendorfer @ 2007-05-17 23:41 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: Junio C Hamano, Andy Parkins, git, Nicolas Pitre
On Thursday 17 May 2007, Michael S. Tsirkin wrote:
> > What I was "handwaving" (or "envisioning") was to have something
> > like this in .gitmodules:
> >
> > [subproject "kernel/"]
> > URL = git://git.kernel.org/pub/linux-2.4.git
> >
> > (or 2.6, depending on the revision of the superproject) and per
> > repository configuration would maps this with these two entries:
> >
> > [subproject "git://git.kernel.org/pub/linux-2.4.git"]
> > URL = http://www.kernel.org/pub/linux-2.4.git
> >
> > [subproject "git://git.kernel.org/pub/linux-2.6.git"]
> > URL = http://www.kernel.org/pub/linux-2.6.git
> >
> > The intent is
> >
> > (1) "kernel/" directory is found to be a gitlink in the
> > tree/index; .gitmodules is consulted to find the
> > "URL", which is just a handle and the initial hint
> >
> > (2) That "initial hint" is used to look up the
> > subproject entry from the configuration, to find the
> > "real" URL that is used by this repository
>
> I'm reading up on submodules, two questions on this:
>
> 1. I understand the usefulness of the hint for public repositories, (the user might
> need help discovering where to get submodules) but for private ones would this
> create a hassle: I start with a subproject in ~/subprojecttest and if that gets
> put in the URL hint, I have to maintain a map for ~/subprojecttest in my
> .git/config forever even after I move it to ~/subprojectproduction, just to make
> old releases build?
Yes, AFAICS that was the original idea; but that is no problem as we will need an
override scheme.
However, I think the usage of "url"/"url hint" as the 1st level subproject identifier
really is badly misleading and confusing for users; it would be better for this
identifier to not look like a URL at all. But by naming it "url" in .gitmodules, the
user is tempted to put an URL at this place.
IMHO it is by far better to simply talk about the "subproject name/identifier" which is
valid in the subproject namespace of the superproject.
And why not use the .gitattributes for the ".gitmodules" needs?
With linux 2.4 as subproject in "top/kernel/", there could be a "top/.gitattributes"
with
kernel subproject=linux24
We could have a default rule that in the absense of the attribute, we default to the
path of the submodule, ie. to
kernel subproject=top/kernel
In .git/config, there needs to be a config entry like
[subproject "linux24"]
URL = http://www.kernel.org/pub/linux-2.4.git
Again, we could have a default URL in the absence of this config entry which is
relative to the URL of the superproject, and which allows for the superproject
repository to act as proxy.
As relative path I would propose $SUPERURL/subproject/$SUBPROJECTNAME, ie. if
the superproject is at git://git.kernel.org/pub/super.git, the above subproject
would default to the URL git://git.kernel.org/pub/super.git/subproject/linux24
which could be a symlink on the server.
To support different subproject repositories linked in at the
same path of a superproject, Nicolas noted that we would have to replace
the subproject repository at top/kernel/.git (taking my example above)
whenever we cross the subproject change boundary in a checkout (e.g. from
linux24 to linux26). The natural thing here would be to have
subproject repositories at a seperate place, like inside of the superproject
repository such as at ".git/subproject/linux24", which works well with my
default interpretation of relative subproject paths above. At checkout,
the correct repository would be bound by a symlink:
top/kernel/.git -> .git/subproject/linux24
Instead of a symlink, a magically working linkage mechanisms would be better
(the .git/gitlink proposal).
> 2. Suppose .gitmodules in upstream tree points at subproject repo at kernel.org,
> and I clone from there - my repo will point at kernel.org by default?
> But now, I'd like everyone who clones from *my* repo to get
> pointed at *my* server by default (e.g. for mirroring),
> but would not changing .gitmodules create a commit so my
> head will now differ from upstream - so it won't be signed properly etc...
> Did I misunderstand something?
No, that is correct. Supporting a relative URL specification as proposed above
should solve this issue.
Josef
>
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 23:41 ` Josef Weidendorfer
@ 2007-05-18 0:32 ` Steven Grimm
2007-05-18 4:50 ` Petr Baudis
2007-05-18 7:57 ` [3/4] What's not in 1.5.2 (new topics) Andy Parkins
1 sibling, 1 reply; 55+ messages in thread
From: Steven Grimm @ 2007-05-18 0:32 UTC (permalink / raw)
To: Josef Weidendorfer
Cc: Michael S. Tsirkin, Junio C Hamano, Andy Parkins, git,
Nicolas Pitre
It seems like a lot of the friction here is because people are trying to
devise a single mechanism that will handle two distinct cases:
1. The location of a subproject's changed (the "public repository
relocated to a different host" problem). This is not temporally
sensitive -- if you check out an old version of the superproject, you
need to look in the new location for the subproject. A local override
for the subproject's location will likely still be perfectly valid.
2. The superproject no longer wants to use the same subproject; it wants
to replace it with something else at the same point in the tree (the
"version 2 of superproject uses the 2.6 kernel as opposed to the 2.4
kernel"). This is temporally sensitive -- if you check out an old
version of the superproject, you want to use the old location for the
subproject too. A single local override will most likely not be valid
for both versions.
I think these are fundamentally different operations and it's the desire
to fold them into one mechanism that's leading to a lot of the
discussion here. Would we simplify things by not conflating them?
For example -- and yes, this is partially a rehash of other people's
ideas -- instead of mapping a subproject path directly to revision@URL,
instead map it to revision@symbolic name. The symbolic name is then
separately mapped to a URL, and it's that symbolic name that can be
locally overridden. The mappings of symbolic names to URLs is
unversioned; the mapping of subprojects to revision@symbolic is
versioned. Local overrides happen at the symbolic->URL mapping.
So you'd have something like
version 1: kernel-src/ -> kernel24
version 2: kernel-src/ -> kernel26
unversioned:
kernel24 -> git://whatever/2.4
kernel26 -> git://whatever/2.6
And then locally, the override is:
kernel24 -> git://myhost/2.4
When version 2 gets pulled down, you start off using the upstream's URL,
which you know because you pulled down the new copy of the unversioned
symbolic->URL map. Maybe git-pull gives you a warning like, "I see you
have some overrides, so you might want to know about this new symbolic
name too." With an appropriate option it might even stop before doing
anything with the new symbolic name to give you a chance to override.
Maybe that has some problems I'm not seeing, but it seems like adding
one more layer of indirection which has different versioning semantics
would make this a more tractable problem.
-Steve
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 0:32 ` Steven Grimm
@ 2007-05-18 4:50 ` Petr Baudis
2007-05-18 9:18 ` Josef Weidendorfer
2007-05-18 12:00 ` Jakub Narebski
0 siblings, 2 replies; 55+ messages in thread
From: Petr Baudis @ 2007-05-18 4:50 UTC (permalink / raw)
To: Steven Grimm
Cc: Josef Weidendorfer, Michael S. Tsirkin, Junio C Hamano,
Andy Parkins, git, Nicolas Pitre
On Fri, May 18, 2007 at 02:32:53AM CEST, Steven Grimm wrote:
> For example -- and yes, this is partially a rehash of other people's
> ideas -- instead of mapping a subproject path directly to revision@URL,
> instead map it to revision@symbolic name. The symbolic name is then
> separately mapped to a URL, and it's that symbolic name that can be
> locally overridden. The mappings of symbolic names to URLs is
> unversioned; the mapping of subprojects to revision@symbolic is
> versioned. Local overrides happen at the symbolic->URL mapping.
>
> So you'd have something like
>
> version 1: kernel-src/ -> kernel24
> version 2: kernel-src/ -> kernel26
> unversioned:
> kernel24 -> git://whatever/2.4
> kernel26 -> git://whatever/2.6
>
> And then locally, the override is:
>
> kernel24 -> git://myhost/2.4
Yes, this would be nice; in one of my first mails in this thread I
devoted a non-trivially large writeup to this, then proceeded to remove
it since this has a serious problem.
Actually, Git already has a nice mechanism to handle these unversionaed
pointers - tags. Just make refs/tags/subproject/kernel24 containing the
URL to fetch. It's even easily overridable locally (and not easily
overridable remotely...).
The problem is ugly too, though - suddenly, you have created a SINGLE
UNIVERSE-WIDE NAMESPACE INSIDE A DISTRIBUTED VCS. And that's not going
to work well. I think I don't have to elaborate too much - the
aforementioned FreeBSD people will have different ideas about kernels
than you, _you_ will have different idea about kernels in few tens of
years than now, then if you need to merge or probably even fetch, you
will get into big trouble.
Notice that we don't have any such namespace right now (except the
D(SHA1) namespace, which is however possible only because it's so huge
_and_ the names are assigned automagically in a way that virtually
guarantees uniqueness across the whole universe) - tags come closest,
but there is nothing that fundamentally breaks when a clash happens
inside the namespace - it's just UI thing. But subproject names are
etched to the history - once you name it, you just can't get rid of it
forever.
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Ever try. Ever fail. No matter. // Try again. Fail again. Fail better.
-- Samuel Beckett
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 23:41 ` Josef Weidendorfer
2007-05-18 0:32 ` Steven Grimm
@ 2007-05-18 7:57 ` Andy Parkins
2007-05-18 8:43 ` Josef Weidendorfer
` (2 more replies)
1 sibling, 3 replies; 55+ messages in thread
From: Andy Parkins @ 2007-05-18 7:57 UTC (permalink / raw)
To: git; +Cc: Josef Weidendorfer, Michael S. Tsirkin, Junio C Hamano,
Nicolas Pitre
On Friday 2007 May 18, Josef Weidendorfer wrote:
> However, I think the usage of "url"/"url hint" as the 1st level subproject
> identifier really is badly misleading and confusing for users; it would be
> better for this identifier to not look like a URL at all. But by naming it
> "url" in .gitmodules, the user is tempted to put an URL at this place.
Bear in mind that what you're suggesting is no different in implementation
from what Junio is suggesting but with one difference: in Junio's option
the "identifier" will act as a default URL if no override is found.
Yours:
.gitmodules:
kernel mykernelsubprojectid
.git/config
[subproject "mykernelsubprojectid"]
url = git://host/blah/blah.git
Junio's:
.gitmodules:
kernel git://oldhost/blah/blah.git
.git/config
[subproject "git://oldhost/blah/blah.git"]
url = git://host/blah/blah.git
There is no difference between these two in terms of implementation. Both
assign a key to the "kernel" submodule then use that key to look up an
override. The advantage of Junio's suggestion is that when an override is
not needed the key itself is used and therefore it Just Works (tm) with no
change to the .git/config necessary.
> And why not use the .gitattributes for the ".gitmodules" needs?
I can't think of a reason why not; I think that's a separate question though.
> Again, we could have a default URL in the absence of this config entry
> which is relative to the URL of the superproject, and which allows for the
> superproject repository to act as proxy.
This is why Junio's option of URL=Key is better. You are relying on the
default being correct in order for a simple clone to work. The relative path
scheme you propose as a default, while logical, doesn't match anything that
anyone does right now. Look at any server that hosts multiple projects; they
are stored flat not deep:
project1/
project2/
project3/
One advantage of submodule support is that multiple supermodules can contain
the same submodule, so you really can't force a hierarchical representation
on the world just to make the default URL correct.
project2/
project1/
project3/
project1/
Oops.
> As relative path I would propose $SUPERURL/subproject/$SUBPROJECTNAME, ie.
> if the superproject is at git://git.kernel.org/pub/super.git, the above
> subproject would default to the URL
> git://git.kernel.org/pub/super.git/subproject/linux24 which could be a
> symlink on the server.
I'm really uncomfortable with the idea of relying on directory structure
passed the root repository path; from the
git://git.kernel.org/pub/super.git/
point onwards; we don't have any right to expect that this is a real directory
tree. As an example; svn URLs don't match up with what's on disk:
svn://svnhost/pub/repo/trunk/src
^^^^^^^^^^
On disk there is no such directory as /trunk/src under the repository
directory. In the same way, even technically what you suggest would work,
the part of the URL under git://git.kernel.org/pub/super.git/ is git's own
namespace - it's not the users to mess with. E.g. if I had a subproject
called "refs" you'd be in trouble.
> To support different subproject repositories linked in at the
> same path of a superproject, Nicolas noted that we would have to replace
> the subproject repository at top/kernel/.git (taking my example above)
> whenever we cross the subproject change boundary in a checkout (e.g. from
> linux24 to linux26). The natural thing here would be to have
> subproject repositories at a seperate place, like inside of the
> superproject repository such as at ".git/subproject/linux24", which works
> well with my default interpretation of relative subproject paths above. At
> checkout, the correct repository would be bound by a symlink:
Your objection to the url=key scheme was lack of simplicity - to me the above
is significantly more complex and is relying far too much on the submodule
being on the same server as the supermodule. Big mistake. A typical use of
submodules would be to integrate someone else's project, not your own, nor
indeed your own checkout of that project. Why should I have to keep my own
copies of, say, kernel2.4 and kernel2.6 when there are perfectly acceptable
URLs to the real repositories?
> > 2. Suppose .gitmodules in upstream tree points at subproject repo at
> > kernel.org, and I clone from there - my repo will point at kernel.org by
> > default? But now, I'd like everyone who clones from *my* repo to get
> > pointed at *my* server by default (e.g. for mirroring),
> > but would not changing .gitmodules create a commit so my
> > head will now differ from upstream - so it won't be signed properly
> > etc... Did I misunderstand something?
>
> No, that is correct. Supporting a relative URL specification as proposed
> above should solve this issue.
I think that's the wrong solution. A change of source URL for a submodule
from what upstream uses to your own server is a _fork_ from upstream,
therefore you would fork your own branch in your supermodule and
alter .gitmodules to point at your server. Everybody is happy, and the fork
is recorded.
The override system is only there for the local repository (which always takes
precedence) not for the server provider to hide detail from those checking
the repo out.
Andy
--
Dr Andy Parkins, M Eng (hons), MIET
andyparkins@gmail.com
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 7:57 ` [3/4] What's not in 1.5.2 (new topics) Andy Parkins
@ 2007-05-18 8:43 ` Josef Weidendorfer
2007-05-18 9:21 ` Andy Parkins
2007-05-18 17:00 ` Junio C Hamano
2007-05-18 8:57 ` Michael S. Tsirkin
2007-05-19 1:02 ` Steven Grimm
2 siblings, 2 replies; 55+ messages in thread
From: Josef Weidendorfer @ 2007-05-18 8:43 UTC (permalink / raw)
To: Andy Parkins; +Cc: git, Michael S. Tsirkin, Junio C Hamano, Nicolas Pitre
On Friday 18 May 2007, Andy Parkins wrote:
> Bear in mind that what you're suggesting is no different in implementation
> >from what Junio is suggesting but with one difference: in Junio's option
> the "identifier" will act as a default URL if no override is found.
Yes; actually, its exactly the same aside from the name used in .gitmodules
for it, as I proposed a default URL which is derived from the suproject identifier
if no config entry is found.
> > Again, we could have a default URL in the absence of this config entry
> > which is relative to the URL of the superproject, and which allows for the
> > superproject repository to act as proxy.
>
> This is why Junio's option of URL=Key is better.
It all depends on how we construct the default URL out of the subproject
identifier. Options:
(1) do not try to construct a default URL at all. Error out without a config
(2) use a configurable rewriting scheme like s/(.*)/git://host/\1/
(3) automatically detect a senseful rewriting scheme
Let's start with (1). We can invent convenient default schemes later on.
Josef
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 7:57 ` [3/4] What's not in 1.5.2 (new topics) Andy Parkins
2007-05-18 8:43 ` Josef Weidendorfer
@ 2007-05-18 8:57 ` Michael S. Tsirkin
2007-05-18 9:40 ` Andy Parkins
2007-05-19 1:02 ` Steven Grimm
2 siblings, 1 reply; 55+ messages in thread
From: Michael S. Tsirkin @ 2007-05-18 8:57 UTC (permalink / raw)
To: Andy Parkins
Cc: git, Josef Weidendorfer, Michael S. Tsirkin, Junio C Hamano,
Nicolas Pitre
...
> > As relative path I would propose $SUPERURL/subproject/$SUBPROJECTNAME, ie.
> > if the superproject is at git://git.kernel.org/pub/super.git, the above
> > subproject would default to the URL
> > git://git.kernel.org/pub/super.git/subproject/linux24 which could be a
> > symlink on the server.
>
> I'm really uncomfortable with the idea of relying on directory structure
> passed the root repository path; from the
> git://git.kernel.org/pub/super.git/
> point onwards; we don't have any right to expect that this is a real directory
> tree. As an example; svn URLs don't match up with what's on disk:
>
> svn://svnhost/pub/repo/trunk/src
> ^^^^^^^^^^
>
> On disk there is no such directory as /trunk/src under the repository
> directory. In the same way, even technically what you suggest would work,
> the part of the URL under git://git.kernel.org/pub/super.git/ is git's own
> namespace - it's not the users to mess with. E.g. if I had a subproject
> called "refs" you'd be in trouble.
Oh, that's easily solvable: just stick a 'subprojects' directory in there.
That is, the default URL to find a subproject would be:
1. For non-bare repo foo/.git/, subproject bar will live in foo/bar/.git
or foo/bar.git.
2. For a bare repo foo.git/, subproject bar will live in
foo.git/subprojects/bar.git.
> > > 2. Suppose .gitmodules in upstream tree points at subproject repo at
> > > kernel.org, and I clone from there - my repo will point at kernel.org by
> > > default? But now, I'd like everyone who clones from *my* repo to get
> > > pointed at *my* server by default (e.g. for mirroring),
> > > but would not changing .gitmodules create a commit so my
> > > head will now differ from upstream - so it won't be signed properly
> > > etc... Did I misunderstand something?
> >
> > No, that is correct. Supporting a relative URL specification as proposed
> > above should solve this issue.
>
> I think that's the wrong solution. A change of source URL for a submodule
> from what upstream uses to your own server is a _fork_ from upstream,
> therefore you would fork your own branch in your supermodule and
> alter .gitmodules to point at your server. Everybody is happy, and the fork
> is recorded.
Why should I record it? If the content is the same, the commit name should
be the same, it shouldn't matter where did the content came from.
I wouldn't be happy: I have just cloned both project and superproject,
but to re-publish the superproject using my clone of subproject, I have
to create a new commit, which would have a different hash from the origin.
So how do people know they can trust my tree?
And what happens when the original super-project pulls from me -
it seems that his .gitmodules will now point to my server?
> The override system is only there for the local repository (which always takes
> precedence) not for the server provider to hide detail from those checking
> the repo out.
I really like it that currently, in git, there is no difference between a public
and local repository. If the override system is only for the local repository,
we create a difference here - doesn't this break the distributed nature of git?
Take offline work as an example:
So I have have cloned the supermodule and the submodule to my laptop -
it's enough to edit .git/config and I can use the history locally - that's good.
But now I try to clone the local tree - and a clone will try to go out
to the URL which I cloned - bad.
--
MST
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 4:50 ` Petr Baudis
@ 2007-05-18 9:18 ` Josef Weidendorfer
2007-05-19 0:56 ` Torgil Svensson
2007-05-18 12:00 ` Jakub Narebski
1 sibling, 1 reply; 55+ messages in thread
From: Josef Weidendorfer @ 2007-05-18 9:18 UTC (permalink / raw)
To: Petr Baudis
Cc: Steven Grimm, Michael S. Tsirkin, Junio C Hamano, Andy Parkins,
git, Nicolas Pitre
On Friday 18 May 2007, Petr Baudis wrote:
> The problem is ugly too, though - suddenly, you have created a SINGLE
> UNIVERSE-WIDE NAMESPACE INSIDE A DISTRIBUTED VCS. And that's not going
> to work well.
Actually, tags are already such a namespace. If you want to merge
two projects which have the same tag names, of course you still
preserve the different tag objects, but only one will appear in the
refs/tags namespace.
So what is the best identifier for a subprobject? It is one that
probably never clashes with any subproject identifier of another
superproject. At least, it should not clash between any superprojects
which ever could be a candidate for merging the two into one.
Junios proposal using an URL as identifier actually is quite good in
this regard, similar to JAVA package names.
However, I wonder whether the possible merge of two superprojects
into one is a real issue. When they use the same subprojects identifiers,
there is a workaround: instead of merging, make one superproject the
subproject of the other.
Josef
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 8:43 ` Josef Weidendorfer
@ 2007-05-18 9:21 ` Andy Parkins
2007-05-18 11:08 ` Michael S. Tsirkin
2007-05-18 17:00 ` Junio C Hamano
1 sibling, 1 reply; 55+ messages in thread
From: Andy Parkins @ 2007-05-18 9:21 UTC (permalink / raw)
To: git; +Cc: Josef Weidendorfer, Michael S. Tsirkin, Junio C Hamano,
Nicolas Pitre
On Friday 2007 May 18, Josef Weidendorfer wrote:
> It all depends on how we construct the default URL out of the subproject
> identifier. Options:
> (1) do not try to construct a default URL at all. Error out without a
> config (2) use a configurable rewriting scheme like s/(.*)/git://host/\1/
> (3) automatically detect a senseful rewriting scheme
>
> Let's start with (1). We can invent convenient default schemes later on.
All good; except let's start with
(1) if no config, try using the key itself - error out if that fails
Then everybody is happy - if you want to use your system where the key is not
a URL, then don't - you'll get the error you want. If the user chose to use
a URL then magic will happen.
Andy
--
Dr Andy Parkins, M Eng (hons), MIET
andyparkins@gmail.com
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 8:57 ` Michael S. Tsirkin
@ 2007-05-18 9:40 ` Andy Parkins
2007-05-18 10:16 ` Johannes Sixt
2007-05-18 11:22 ` Michael S. Tsirkin
0 siblings, 2 replies; 55+ messages in thread
From: Andy Parkins @ 2007-05-18 9:40 UTC (permalink / raw)
To: git, Michael S. Tsirkin; +Cc: Josef Weidendorfer, Junio C Hamano, Nicolas Pitre
On Friday 2007 May 18, Michael S. Tsirkin wrote:
> > I think that's the wrong solution. A change of source URL for a
> > submodule from what upstream uses to your own server is a _fork_ from
> > upstream, therefore you would fork your own branch in your supermodule
> > and alter .gitmodules to point at your server. Everybody is happy, and
> > the fork is recorded.
>
> Why should I record it? If the content is the same, the commit name should
> be the same, it shouldn't matter where did the content came from.
Because you have changed something that the upstream repository supplied with
no way of detecting it. It's the same as if upstream supplied
important_login_function.c and then you clone it; if your clone had a way of
changing important_login_function.c to add a backdoor and passing that to
people who clone from you without changing the commit hash that would be bad.
Submodules is the same; upstream might say
kernel git://git.kernel.org/kernel-2.6.git
Then you clone it and use the override system to override that to
kernel git://git.dodgykernel.org/backdoors.git
without having to change the repository.
The server should not be allowed to override the url that the client sees.
Only the client should make that decision.
> I wouldn't be happy: I have just cloned both project and superproject,
> but to re-publish the superproject using my clone of subproject, I have
> to create a new commit, which would have a different hash from the origin.
> So how do people know they can trust my tree?
That problem exists regardless of the method of changing URL - in your method
though the change is entirely unrecorded because you've changed something
that upstream supplied in an out-of-band manner.
> And what happens when the original super-project pulls from me -
> it seems that his .gitmodules will now point to my server?
Now that one is a good defence. Okay; I accept that changing .gitmodules
won't work. However, I don't accept that the server should be allowed to
supply overrides to the client. Another method is needed.
> > The override system is only there for the local repository (which always
> > takes precedence) not for the server provider to hide detail from those
> > checking the repo out.
>
> I really like it that currently, in git, there is no difference between a
> public and local repository. If the override system is only for the local
Of course there is a difference. .git/config is different; .git/refs is
different; .git/info/exclude is different; etc. These are all per-repository
settings - and there is no way for a server to force it's version of those
files on a client.
> So I have have cloned the supermodule and the submodule to my laptop -
> it's enough to edit .git/config and I can use the history locally - that's
> good. But now I try to clone the local tree - and a clone will try to go
> out to the URL which I cloned - bad.
Yep. That is the problem. In the end the only practical solution might be to
allow the server to supply part of the .git/config (which is essentially what
your suggestion would do); but I think that that is a big step to take and
has potential to be abused.
Andy
--
Dr Andy Parkins, M Eng (hons), MIET
andyparkins@gmail.com
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 9:40 ` Andy Parkins
@ 2007-05-18 10:16 ` Johannes Sixt
2007-05-18 11:22 ` Michael S. Tsirkin
1 sibling, 0 replies; 55+ messages in thread
From: Johannes Sixt @ 2007-05-18 10:16 UTC (permalink / raw)
To: git
Andy Parkins wrote:
> On Friday 2007 May 18, Michael S. Tsirkin wrote:
> > I wouldn't be happy: I have just cloned both project and superproject,
> > but to re-publish the superproject using my clone of subproject, I have
> > to create a new commit, which would have a different hash from the origin.
> > So how do people know they can trust my tree?
>
> That problem exists regardless of the method of changing URL - in your method
> though the change is entirely unrecorded because you've changed something
> that upstream supplied in an out-of-band manner.
And it doesn't matter: Once you trust the superproject with its
.gitmodules (versioned or not), the trust is based on the SHA1 of the
gitlink entry. Where the so named subproject commit came from is
secondary.
-- Hannes
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 9:21 ` Andy Parkins
@ 2007-05-18 11:08 ` Michael S. Tsirkin
2007-05-18 12:27 ` Josef Weidendorfer
` (2 more replies)
0 siblings, 3 replies; 55+ messages in thread
From: Michael S. Tsirkin @ 2007-05-18 11:08 UTC (permalink / raw)
To: Andy Parkins
Cc: git, Josef Weidendorfer, Michael S. Tsirkin, Junio C Hamano,
Nicolas Pitre
> Quoting Andy Parkins <andyparkins@gmail.com>:
> Subject: Re: [3/4] What's not in 1.5.2 (new topics)
>
> On Friday 2007 May 18, Josef Weidendorfer wrote:
>
> > It all depends on how we construct the default URL out of the subproject
> > identifier. Options:
> > (1) do not try to construct a default URL at all. Error out without a
> > config (2) use a configurable rewriting scheme like s/(.*)/git://host/\1/
> > (3) automatically detect a senseful rewriting scheme
> >
> > Let's start with (1). We can invent convenient default schemes later on.
>
> All good; except let's start with
>
> (1) if no config, try using the key itself - error out if that fails
>
> Then everybody is happy - if you want to use your system where the key is not
> a URL, then don't - you'll get the error you want. If the user chose to use
> a URL then magic will happen.
I don't want an error. No one wants an error.
I want to be able to clone a super project, a subproject,
and use my copy of both instead of the original - including
cloning my copy, pulls between such clones, being able to verify
that they are identical.
What I *don't* want is a situation where the fact that original repository
resides in north america necessarily means that everyone who looks at *my* clone
of it will do a round trip to north america too.
And this means that URLs must be out of tree, but does *not* mean that
git-daemon should not serve them for user's convenience.
How about an ability for git-daemon to get commands with git-config?
--
MST
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 9:40 ` Andy Parkins
2007-05-18 10:16 ` Johannes Sixt
@ 2007-05-18 11:22 ` Michael S. Tsirkin
2007-05-18 12:36 ` Andy Parkins
1 sibling, 1 reply; 55+ messages in thread
From: Michael S. Tsirkin @ 2007-05-18 11:22 UTC (permalink / raw)
To: Andy Parkins
Cc: git, Michael S. Tsirkin, Josef Weidendorfer, Junio C Hamano,
Nicolas Pitre
> The server should not be allowed to override the url that the client sees.
> Only the client should make that decision.
Why is that? Content is what is important. URLs are only a convenience measure
to help clients find the content. The link must have a commit hash, so git can
*verify* that the content is correct. Where it comes from must be irrelevant.
So if someone looks at my tree, and does not know where to get the content, he
might want my hint on this.
--
MST
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 4:50 ` Petr Baudis
2007-05-18 9:18 ` Josef Weidendorfer
@ 2007-05-18 12:00 ` Jakub Narebski
2007-05-18 12:41 ` Petr Baudis
2007-05-18 18:37 ` Junio C Hamano
1 sibling, 2 replies; 55+ messages in thread
From: Jakub Narebski @ 2007-05-18 12:00 UTC (permalink / raw)
To: git
[Cc: Petr Baudis <pasky@suse.cz>, Josef Weidendorfer
<Josef.Weidendorfer@gmx.de>, "Michael S. Tsirkin" <mst@dev.mellanox.co.il>,
Junio C Hamano <junkio@cox.net>, Andy Parkins <andyparkins@gmail.com>,
Nicolas Pitre <nico@cam.org>, git@vger.kernel.org]
Petr Baudis wrote:
> On Fri, May 18, 2007 at 02:32:53AM CEST, Steven Grimm wrote:
>> For example -- and yes, this is partially a rehash of other people's
>> ideas -- instead of mapping a subproject path directly to revision@URL,
>> instead map it to revision@symbolic name. The symbolic name is then
>> separately mapped to a URL, and it's that symbolic name that can be
>> locally overridden. The mappings of symbolic names to URLs is
>> unversioned; the mapping of subprojects to revision@symbolic is
>> versioned. Local overrides happen at the symbolic->URL mapping.
>>
>> So you'd have something like
>>
>> version 1: kernel-src/ -> kernel24
>> version 2: kernel-src/ -> kernel26
>> unversioned:
>> kernel24 -> git://whatever/2.4
>> kernel26 -> git://whatever/2.6
>>
>> And then locally, the override is:
>>
>> kernel24 -> git://myhost/2.4
>
> Yes, this would be nice; in one of my first mails in this thread I
> devoted a non-trivially large writeup to this, then proceeded to remove
> it since this has a serious problem.
>
> Actually, Git already has a nice mechanism to handle these unversionaed
> pointers - tags. Just make refs/tags/subproject/kernel24 containing the
> URL to fetch. It's even easily overridable locally (and not easily
> overridable remotely...).
>
> The problem is ugly too, though - suddenly, you have created a SINGLE
> UNIVERSE-WIDE NAMESPACE INSIDE A DISTRIBUTED VCS. And that's not going
> to work well. I think I don't have to elaborate too much - the
> aforementioned FreeBSD people will have different ideas about kernels
> than you, _you_ will have different idea about kernels in few tens of
> years than now, then if you need to merge or probably even fetch, you
> will get into big trouble.
>
> Notice that we don't have any such namespace right now (except the
> D(SHA1) namespace, which is however possible only because it's so huge
> _and_ the names are assigned automagically in a way that virtually
> guarantees uniqueness across the whole universe) - tags come closest,
> but there is nothing that fundamentally breaks when a clash happens
> inside the namespace - it's just UI thing. But subproject names are
> etched to the history - once you name it, you just can't get rid of it
> forever.
There is a bit ugly solution for this: instead of using symbolic name
in versioned .gitmodules for a subproject (for a repo), use subproject
identifier (inode), and put it in the tag object (or config) together with
the URL. Git would then search all the subproject / submodule info for
a given inode. You could have more than one inode / identifier name for
a subproject repo; this would avoid the "independently created" issue
with using inodes / file-ids in distributed SCM. One would have to
ensure however that different subprojects get assigned different inodes.
This is yet another level of indirection, and needs searching all the
subprojects info; but I don't think that there would be that many
subprojects used.
Besides we make use of one such global namespace: version tags (although
they _could_ have different names, e.g. v0.6.0 and gitgui-0.6.0).
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 11:08 ` Michael S. Tsirkin
@ 2007-05-18 12:27 ` Josef Weidendorfer
2007-05-18 12:46 ` Michael S. Tsirkin
2007-05-18 15:06 ` Aidan Van Dyk
2007-05-19 12:50 ` Sven Verdoolaege
2 siblings, 1 reply; 55+ messages in thread
From: Josef Weidendorfer @ 2007-05-18 12:27 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: Andy Parkins, git, Junio C Hamano, Nicolas Pitre
On Friday 18 May 2007, Michael S. Tsirkin wrote:
> > Quoting Andy Parkins <andyparkins@gmail.com>:
> > Subject: Re: [3/4] What's not in 1.5.2 (new topics)
> >
> > On Friday 2007 May 18, Josef Weidendorfer wrote:
> >
> > > It all depends on how we construct the default URL out of the subproject
> > > identifier. Options:
> > > (1) do not try to construct a default URL at all. Error out without a
> > > config (2) use a configurable rewriting scheme like s/(.*)/git://host/\1/
> > > (3) automatically detect a senseful rewriting scheme
> > >
> > > Let's start with (1). We can invent convenient default schemes later on.
> >
> > All good; except let's start with
> >
> > (1) if no config, try using the key itself - error out if that fails
> >
> > Then everybody is happy - if you want to use your system where the key is not
> > a URL, then don't - you'll get the error you want. If the user chose to use
> > a URL then magic will happen.
>
> I don't want an error. No one wants an error.
Heh.
Of course, a git-clone should come up with a URL in the local config
such that subproject clones can happen without any an error.
The error would potentially happen after cloning if no config entry
for the URL can be found, e.g. when you decided at clone time to not
fetch any subprojects, but do that later.
> I want to be able to clone a super project, a subproject,
> and use my copy of both instead of the original - including
> cloning my copy, pulls between such clones, being able to verify
> that they are identical.
What about using user-global git configuration for this *before*
git-clone of the superprojects happens?
Lets say you have a clone of the linux-2.6 repository at ~/gitrepo/linux26,
and you want to clone a superproject which includes linux-2.6 as subproject,
using "linux26" (or perhaps "git://git.kernel.org/pub/linux-2.6.git") as
subproject identifier.
Before cloning this superproject, you should be able to set up in ~/.gitconfig
[project "linux26"]
localurl = ~/gitrepo/linux26
and the clone of the superproject should be able to use this repository as
subproject repository.
> What I *don't* want is a situation where the fact that original repository
> resides in north america necessarily means that everyone who looks at *my* clone
> of it will do a round trip to north america too.
Someone which clones from you probably does not have access to "~/gitrepo/linux26",
so you have to provide a public visible URL either way, like
[project "linux26"]
localurl = ~/gitrepo/linux26
url = git://myhost/mylinux26.git
and the "url" should be configured at the remote side at clone time.
Josef
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 11:22 ` Michael S. Tsirkin
@ 2007-05-18 12:36 ` Andy Parkins
0 siblings, 0 replies; 55+ messages in thread
From: Andy Parkins @ 2007-05-18 12:36 UTC (permalink / raw)
To: git, Michael S. Tsirkin; +Cc: Josef Weidendorfer, Junio C Hamano, Nicolas Pitre
On Friday 2007 May 18, Michael S. Tsirkin wrote:
> Why is that? Content is what is important. URLs are only a convenience
> measure to help clients find the content. The link must have a commit
> hash, so git can *verify* that the content is correct. Where it comes from
> must be irrelevant.
>
> So if someone looks at my tree, and does not know where to get the content,
> he might want my hint on this.
True. Hannes also pointed out that the trust comes from the hash contained in
the gitlink that is in tree, there is no need to assign trust to the URL.
I withdraw my objection.
Andy
--
Dr Andy Parkins, M Eng (hons), MIET
andyparkins@gmail.com
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 12:00 ` Jakub Narebski
@ 2007-05-18 12:41 ` Petr Baudis
2007-05-19 16:38 ` Jakub Narebski
2007-05-18 18:37 ` Junio C Hamano
1 sibling, 1 reply; 55+ messages in thread
From: Petr Baudis @ 2007-05-18 12:41 UTC (permalink / raw)
To: Jakub Narebski
Cc: Josef Weidendorfer, Michael S. Tsirkin, Junio C Hamano,
Andy Parkins, Nicolas Pitre, git
On Fri, May 18, 2007 at 02:00:07PM CEST, Jakub Narebski wrote:
> There is a bit ugly solution for this: instead of using symbolic name
> in versioned .gitmodules for a subproject (for a repo), use subproject
> identifier (inode), and put it in the tag object (or config) together with
> the URL. Git would then search all the subproject / submodule info for
> a given inode. You could have more than one inode / identifier name for
> a subproject repo; this would avoid the "independently created" issue
> with using inodes / file-ids in distributed SCM. One would have to
> ensure however that different subprojects get assigned different inodes.
Well, then it doesn't make any difference, no? You just renamed the
problem but it stays the same - to ensure uniqueness even across
repositories.
Ok, you can declare now that you will just think out a UUID for the
subproject, but aside of not fitting well with the whole git philosophy,
then you don't need the indirection again, just use the UUID as the tag
name.
I have the feeling that I'm missing something basic in your proposal...
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Ever try. Ever fail. No matter. // Try again. Fail again. Fail better.
-- Samuel Beckett
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 12:27 ` Josef Weidendorfer
@ 2007-05-18 12:46 ` Michael S. Tsirkin
0 siblings, 0 replies; 55+ messages in thread
From: Michael S. Tsirkin @ 2007-05-18 12:46 UTC (permalink / raw)
To: Josef Weidendorfer
Cc: Michael S. Tsirkin, Andy Parkins, git, Junio C Hamano,
Nicolas Pitre
> > What I *don't* want is a situation where the fact that original repository
> > resides in north america necessarily means that everyone who looks at *my* clone
> > of it will do a round trip to north america too.
>
> Someone which clones from you probably does not have access to "~/gitrepo/linux26",
> so you have to provide a public visible URL either way, like
>
> [project "linux26"]
> localurl = ~/gitrepo/linux26
> url = git://myhost/mylinux26.git
>
> and the "url" should be configured at the remote side at clone time.
Right. In other words, urls for each project are unversioned file, and git-daemon
needs to be taught to serve them up (I think it already serves head names, which are
unversioned too). Actually, can't something like what we do for remotes head
names work here as well?
--
MST
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-17 18:49 ` Junio C Hamano
@ 2007-05-18 12:58 ` Jeff King
0 siblings, 0 replies; 55+ messages in thread
From: Jeff King @ 2007-05-18 12:58 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Petr Baudis, Alex Riesen, Andy Parkins, git
On Thu, May 17, 2007 at 11:49:12AM -0700, Junio C Hamano wrote:
> > Instead, why not:
> > 1. url location is supplied in configuration as
> > [subproject "kernel/"]
> > url = git://git.kernel.org/pub/linux-2.4.git
> > 2. .gitmodules is simply read as a lower-priority version of
> > configuration
>
> That does not support seeking back and forth between appliance
> release #1 and release #2 which wants to say they want to bind
> two different things at the same kernel/ path, does it?
I had a vague notion that the subproject could hold _both_ of them,
since it's really the commits you're flipping between. But obviously
that has quite complex semantics, so now it's me doing the handwaving.
What is the planned behavior when doing such a switch? I.e., if I have
kernel/ bound to linux-2.6, and I do a 'git-checkout' back in time to a
version that wants linux-2.4 bound at kernel/, what will happen? Blowing
away my subproject repo doesn't seem right.
-Peff
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 11:08 ` Michael S. Tsirkin
2007-05-18 12:27 ` Josef Weidendorfer
@ 2007-05-18 15:06 ` Aidan Van Dyk
2007-05-18 15:31 ` Michael S. Tsirkin
2007-05-19 12:50 ` Sven Verdoolaege
2 siblings, 1 reply; 55+ messages in thread
From: Aidan Van Dyk @ 2007-05-18 15:06 UTC (permalink / raw)
To: Michael S. Tsirkin, git, Josef Weidendorfer, Michael S. Tsirkin,
Junio C Hamano, Nicolas Pitre, Andy Parkins
Michael S. Tsirkin wrote:
>> Quoting Andy Parkins <andyparkins@gmail.com>:
>> Subject: Re: [3/4] What's not in 1.5.2 (new topics)
>>
>> On Friday 2007 May 18, Josef Weidendorfer wrote:
>>
>> > It all depends on how we construct the default URL out of the
>> > subproject identifier. Options:
>> > (1) do not try to construct a default URL at all. Error out without a
>> > config (2) use a configurable rewriting scheme like
>> > s/(.*)/git://host/\1/ (3) automatically detect a senseful rewriting
>> > scheme
>> >
>> > Let's start with (1). We can invent convenient default schemes later
>> > on.
>>
>> All good; except let's start with
>>
>> (1) if no config, try using the key itself - error out if that fails
>>
>> Then everybody is happy - if you want to use your system where the key is
>> not
>> a URL, then don't - you'll get the error you want. If the user chose to
>> use a URL then magic will happen.
>
> I don't want an error. No one wants an error.
>
> I want to be able to clone a super project, a subproject,
> and use my copy of both instead of the original - including
> cloning my copy, pulls between such clones, being able to verify
> that they are identical.
>
> What I *don't* want is a situation where the fact that original repository
> resides in north america necessarily means that everyone who looks at *my*
> clone of it will do a round trip to north america too.
Again - if *I* create a project, and decide to use a particular key for a
subproject, then good. If *you* create a project and decide to use a
particular key for a subproject, then good.
If you clone *my* superproject, you get *my* choice of key. If I clone
*your* superproject, I get *your* choice of key.
The fact that I can choose a URL as my key is in no way influencing the fact
that you can choose to *not* use a URL for your key.
And if if you want to "copy" my project, but "change" the key for the
subproject, that's something you can too to! In GIT, that's a branch.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 15:06 ` Aidan Van Dyk
@ 2007-05-18 15:31 ` Michael S. Tsirkin
0 siblings, 0 replies; 55+ messages in thread
From: Michael S. Tsirkin @ 2007-05-18 15:31 UTC (permalink / raw)
To: Aidan Van Dyk
Cc: Michael S. Tsirkin, git, Josef Weidendorfer, Junio C Hamano,
Nicolas Pitre, Andy Parkins
> Again - if *I* create a project, and decide to use a particular key for a
> subproject, then good. If *you* create a project and decide to use a
> particular key for a subproject, then good.
>
> If you clone *my* superproject, you get *my* choice of key. If I clone
> *your* superproject, I get *your* choice of key.
Absolutely. What I object to is using this key in clients
as a hint for where to get the objects.
This *must* be overridable by me, without creating commits.
--
MST
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
[not found] ` <200705181751.15435.Josef.Weidendorfer@gmx.de>
@ 2007-05-18 16:08 ` Petr Baudis
2007-05-18 16:21 ` Michael S. Tsirkin
0 siblings, 1 reply; 55+ messages in thread
From: Petr Baudis @ 2007-05-18 16:08 UTC (permalink / raw)
To: Josef Weidendorfer
Cc: Michael S. Tsirkin, Jakub Narebski, Junio C Hamano, Andy Parkins,
Nicolas Pitre, git
On Fri, May 18, 2007 at 05:51:14PM CEST, Josef Weidendorfer wrote:
> On Friday 18 May 2007, Michael S. Tsirkin wrote:
> > > Subproject identifiers appear in versioned .gitmodule files, so
> > > they are fixed with the history of the project. You can not change
> > > the names without rewriting history.
> >
> > Actually, I think this means that moving the
> > directory where the subproject resides will involve
> > editing .gitmodule. I sthat true?
>
> Yes.
> This was a design decision by Linus. The alternative way
> would have been a separate gitlink object, which includes the
> commit SHA1 of the subproject _and_ a subproject identifier,
> thus increasing the number of objects.
>
> The current way is far simpler, but you have to edit the .gitmodule
> file when moving subprojects around. The argument by Linus was
> that this inconvenience should be acceptable as moving subprojects
> around should only happen very few times in the lifetime of a
> project, and involves heavy rearranging either way, such that editing
> .gitmodules info is the smaller issue.
Furthermore, git mv can trivially take care of this anyway...
> > This would be annoying.
> >
> > Can't a project name be a git attribute for the gitlink object?
>
> Of course. The name can be put into the .gitattributes file instead of
> a separate .gitmodules file.
>
> > This way I can move the object and it keeps the project name.
>
> No.
> Git attributes do not magically move around when you move files or
> directories. You always have to change the .gitattribute file too, if
> you want to move attributes with files. Of course, this is not needed
> if you use glob patterns in .gitattributes which also fits for moved
> files.
Actually, git-mv might take care of this too? ;-) (Would it be
considered a Bad Thing, or should I whip up a patch?)
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Ever try. Ever fail. No matter. // Try again. Fail again. Fail better.
-- Samuel Beckett
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 16:08 ` Petr Baudis
@ 2007-05-18 16:21 ` Michael S. Tsirkin
0 siblings, 0 replies; 55+ messages in thread
From: Michael S. Tsirkin @ 2007-05-18 16:21 UTC (permalink / raw)
To: Petr Baudis
Cc: Josef Weidendorfer, Michael S. Tsirkin, Jakub Narebski,
Junio C Hamano, Andy Parkins, Nicolas Pitre, git
> > The current way is far simpler, but you have to edit the .gitmodule
> > file when moving subprojects around. The argument by Linus was
> > that this inconvenience should be acceptable as moving subprojects
> > around should only happen very few times in the lifetime of a
> > project, and involves heavy rearranging either way, such that editing
> > .gitmodules info is the smaller issue.
>
> Furthermore, git mv can trivially take care of this anyway...
Good idea.
--
MST
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 8:43 ` Josef Weidendorfer
2007-05-18 9:21 ` Andy Parkins
@ 2007-05-18 17:00 ` Junio C Hamano
2007-05-19 18:12 ` Michael S. Tsirkin
1 sibling, 1 reply; 55+ messages in thread
From: Junio C Hamano @ 2007-05-18 17:00 UTC (permalink / raw)
To: Josef Weidendorfer
Cc: Andy Parkins, git, Michael S. Tsirkin, Nicolas Pitre,
Steven Grimm
Josef Weidendorfer <Josef.Weidendorfer@gmx.de> writes:
> On Friday 18 May 2007, Andy Parkins wrote:
>> Bear in mind that what you're suggesting is no different in implementation
>> >from what Junio is suggesting but with one difference: in Junio's option
>> the "identifier" will act as a default URL if no override is found.
>
> Yes; actually, its exactly the same aside from the name used in .gitmodules
> for it, as I proposed a default URL which is derived from the suproject identifier
> if no config entry is found.
>
>> > Again, we could have a default URL in the absence of this config entry
>> > which is relative to the URL of the superproject, and which allows for the
>> > superproject repository to act as proxy.
>>
>> This is why Junio's option of URL=Key is better.
There is one thing that three-level thing Steven Grimm suggested
solves cleaner that my strawman would not.
If the superproject is about building a live-cd that hosts two
different systems, one BSD and the other Linux, you would have:
kernel-bsd/ subproject pointing at http://some.bsd.org/
kernel-linux/ pointing at http://www.kernel.org/kernel/
Now suppose kernel.org people forgot to renew the domain
registration and BSD people are quick to react, takes over the
nice "kernel.org" domain, and now the latter URL becomes a site
about the BSD kernel---what happens? ;-) URL=Key scheme uses the
URL as the key so newer kernel-bsd/ subproject may be pointed at
by http://www.kernel.org/kernel/ in the superproject after such
a transition. Linux kernel wouldn't cease to be served, so
in your .git/config you will a map to tell git to fetch from the
new location http://www.linux-kernel.org/kernel, but what key
would you use? Using http://www.kernel.org/kernel/ would not be
correct as it would work only for older parts of the history.
Newer part of the history would want to map the same URL (=Key)
to http://www.kernel.org/kernel which is now hosting the BSD
kernel.
In short, you would need to be able to express the "intent" in
the .gitmodules and say "I am talking about the Linux kernel
with this entry", and if the same URL used for that purpose is
ever retargetted to house something different that is also used
in your superproject, URL=Key scheme is screwed.
Also I would be lying if I said I do not like the three-level
thing --- that was one of the options I considered before the
URL=Key thing. Steven's three-level thing does not have the
above problem (but there is one thing you need to be careful
about, which I'll mention at the end of this discussion).
> It all depends on how we construct the default URL out of the subproject
> identifier. Options:
> (1) do not try to construct a default URL at all. Error out without a config
> (2) use a configurable rewriting scheme like s/(.*)/git://host/\1/
> (3) automatically detect a senseful rewriting scheme
>
> Let's start with (1). We can invent convenient default schemes later on.
My preference is to stay at (1), and even if we are to do the
later steps, do it _always_ with confirmation from the user.
Fetching from a new URL (not just "different from what is
defined in .gitmodules") is a major deal from security point of
view (you should not fetch from stranger you do not trust).
There is one thing that I sense was misunderstood by some people
about my original strawman. Entries in .git/config are _not_
used as an override. They _are_ the only thing that are used.
Let's forget the above "BSD takes over kernel.org" example,
which was a tongue-in-cheek, and go back to the original
appliance release #1 and #2 uses kernel 2.4 and 2.6 example.
When you see this in .gitmodule:
[subproject "kernel/"]
URL = git://git.kernel.org/pub/linux-2.4.git
you can be in three states:
(1) You haven't known about this subproject's URL.
(2) You have already known about this subproject, and you
earlier decided not to clone it nor check it out (i.e. in
your working tree, kernel/ subdirectory is left empty).
By default, you do not want to be bothered by this
subproject.
(3) You have known about this subproject, and you earlier
decided that you are interested in it. You have a
repository and working tree that represents the subproject
checked out in your kernel/ subdirectory. By default, you
want to keep track of this subproject.
Obviously in the initial-clone case you can only be in state
(1). After the initial clone, if the upstream changed the
kernel/ binding to point at 2.6 kernel tree, you are also in the
same state (1).
In these cases, since the upstream clearly states that they are
now talking about a project unknown to you so far, or talking
about a different project (it could be just a new location for
the same thing, the case Steven's three-level thing can help you
to differenciate with this), I DO NOT want git to automatically
say "Ok, that's the new location" and blindly start following.
An unattended pull (actually, the checkout step after a pull)
SHOULD error out.
An interactive case should give an easy way for the user to
express his preference: (a) I do not care about this subproject,
(b) I do want to have this cloned and checked out, and the
suggested URL in .gitmodules would work fine for me, or (c) I do
want to have this, but I want to use this other URL because I
have a local mirror already.
I wrote in my original strawman to have these two entries in the
.git/config file:
[subproject "git://git.kernel.org/pub/linux-2.4.git"]
URL = http://www.kernel.org/pub/linux-2.4.git
The example mapped the URL=Key to a different URL, which gave a
false impression that I was only talking about override, but
that was my fault. My intention was to use the _presense_ of
subproject.$URL section in .git/config as a way to detect state
(1), so when the user says "I do want to follow this subproject
and the .gitmodules URL is Ok" (iow, choice (b) above), you
would have an identical "mapping" there:
[subproject "git://git.kernel.org/pub/linux-2.4.git"]
URL = git://git.kernel.org/pub/linux-2.4.git
That's not an "override". Lack of these two lines does not mean
you will blindly follow kernel/ subproject using the URL
recorded in .gitmodules file; it means you haven't decided what
to do about the kernel/ subproject yet.
If the user wants to say "I am not interested" (iow, choice (a)
above), we would not have URL section, but explicit variable to
say "I am not interested" there, like this:
[subproject "git://git.kernel.org/pub/linux-2.4.git"]
ignored
Then the presense of this section tells us that we are not in
state (1) about this subproject.
The above can easily be rewritten to use Steven's three-level
scheme, which I tend to think would work better. But if we were
to do that, I think the .git/config section should give you a
way to differentiate not just known/unknown subprojects but also
a way to differentiate known/unknown URLs.
IOW, .gitmodules in three-level scheme might say:
[subproject "kernel/"]
name = linux-2.6
URL = git://git.kernel.org/pub/linux-2.6.git
and your .git/config would say:
[subproject "linux-2.6"]
URL = http://www.kernel.org/pub/linux-2.6.git
seen = git://git.kernel.org/pub/linux-2.6.git
so that when the upstream .gitmodules changed the suggested URL
to "git://git.or.cz/pub/linux-2.6.git", the UI can say:
The project uses "linux-2.6" project at kernel/
subdirectory as subproject, we already know that you are
interested in tracking it, that you have been tracking
it with http://www.kernel.org/pub/linux-2.6.git URL.
The upstream suggests a new URL you haven't seen, which is
"git://git.or.cz/pub/linux-2.6.git". Do you want to
adjust the URL to follow this subproject?
The user may say yes and tell git to use http:// instead, in
which case the section in .git/config would become:
[subproject "linux-2.6"]
URL = http://git.or.cz/pub/linux-2.6.git
seen = git://git.kernel.org/pub/linux-2.6.git
seen = git://git.or.cz/pub/linux-2.6.git
After that, if the upstream wags the entry .gitmodules back to
point at git.kernel.org/, you already know about that repository
and the UI does not have to ask you what to do about it. That's
made possible by using URL=Key in my strawman, but needs to be
done by this extra 'seen' multi-value variables in the three-level
scheme.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 12:00 ` Jakub Narebski
2007-05-18 12:41 ` Petr Baudis
@ 2007-05-18 18:37 ` Junio C Hamano
2007-05-18 18:40 ` Julian Phillips
1 sibling, 1 reply; 55+ messages in thread
From: Junio C Hamano @ 2007-05-18 18:37 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git
Jakub Narebski <jnareb@gmail.com> writes:
> [Cc: Petr Baudis <pasky@suse.cz>, Josef Weidendorfer
> <Josef.Weidendorfer@gmx.de>, "Michael S. Tsirkin" <mst@dev.mellanox.co.il>,
> Junio C Hamano <junkio@cox.net>, Andy Parkins <andyparkins@gmail.com>,
> Nicolas Pitre <nico@cam.org>, git@vger.kernel.org]
Offtopic. Why do you do this, and what benefit are you or
anybody in the above list, which is in body part of the message,
getting?
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 18:37 ` Junio C Hamano
@ 2007-05-18 18:40 ` Julian Phillips
2007-05-18 18:45 ` Junio C Hamano
0 siblings, 1 reply; 55+ messages in thread
From: Julian Phillips @ 2007-05-18 18:40 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Jakub Narebski, git
On Fri, 18 May 2007, Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
>
>> [Cc: Petr Baudis <pasky@suse.cz>, Josef Weidendorfer
>> <Josef.Weidendorfer@gmx.de>, "Michael S. Tsirkin" <mst@dev.mellanox.co.il>,
>> Junio C Hamano <junkio@cox.net>, Andy Parkins <andyparkins@gmail.com>,
>> Nicolas Pitre <nico@cam.org>, git@vger.kernel.org]
>
> Offtopic. Why do you do this, and what benefit are you or
> anybody in the above list, which is in body part of the message,
> getting?
It looks like he is posting through gmane using a news reader ... so the
list post comes from gmane while the CCs go out directly (I assume).
--
Julian
---
Green's Law of Debate:
Anything is possible if you don't know what you're talking about.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 18:40 ` Julian Phillips
@ 2007-05-18 18:45 ` Junio C Hamano
2007-05-20 0:16 ` Petr Baudis
0 siblings, 1 reply; 55+ messages in thread
From: Junio C Hamano @ 2007-05-18 18:45 UTC (permalink / raw)
To: Julian Phillips; +Cc: Jakub Narebski, git
Julian Phillips <julian@quantumfyre.co.uk> writes:
> On Fri, 18 May 2007, Junio C Hamano wrote:
>
>> Jakub Narebski <jnareb@gmail.com> writes:
>>
>>> [Cc: Petr Baudis <pasky@suse.cz>, Josef Weidendorfer
>>> <Josef.Weidendorfer@gmx.de>, "Michael S. Tsirkin" <mst@dev.mellanox.co.il>,
>>> Junio C Hamano <junkio@cox.net>, Andy Parkins <andyparkins@gmail.com>,
>>> Nicolas Pitre <nico@cam.org>, git@vger.kernel.org]
>>
>> Offtopic. Why do you do this, and what benefit are you or
>> anybody in the above list, which is in body part of the message,
>> getting?
>
> It looks like he is posting through gmane using a news reader ... so
> the list post comes from gmane while the CCs go out directly (I
> assume).
Ah, I see. The names listed on that in-body CC: do appear on
the To: in the copy of the message that came via e-mail. If
that is how gmane operates then there is nothing Jakub to do to
improve it, I guess...
Thanks for the clarification.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 9:18 ` Josef Weidendorfer
@ 2007-05-19 0:56 ` Torgil Svensson
0 siblings, 0 replies; 55+ messages in thread
From: Torgil Svensson @ 2007-05-19 0:56 UTC (permalink / raw)
To: Josef Weidendorfer
Cc: Petr Baudis, Steven Grimm, Michael S. Tsirkin, Junio C Hamano,
Andy Parkins, git, Nicolas Pitre
On 5/18/07, Josef Weidendorfer <Josef.Weidendorfer@gmx.de> wrote:
> On Friday 18 May 2007, Petr Baudis wrote:
> So what is the best identifier for a subprobject? It is one that
> probably never clashes with any subproject identifier of another
> superproject. At least, it should not clash between any superprojects
> which ever could be a candidate for merging the two into one.
Put all root-commit SHA1 in a file, call it something like "project
object" and take the SHA1 of that object the identifier. The
SHA1-route has been successful so far as distributed "keys".
//Torgil
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 7:57 ` [3/4] What's not in 1.5.2 (new topics) Andy Parkins
2007-05-18 8:43 ` Josef Weidendorfer
2007-05-18 8:57 ` Michael S. Tsirkin
@ 2007-05-19 1:02 ` Steven Grimm
2007-05-19 16:55 ` Josef Weidendorfer
2 siblings, 1 reply; 55+ messages in thread
From: Steven Grimm @ 2007-05-19 1:02 UTC (permalink / raw)
To: Andy Parkins
Cc: git, Josef Weidendorfer, Michael S. Tsirkin, Junio C Hamano,
Nicolas Pitre
Andy Parkins wrote:
> Bear in mind that what you're suggesting is no different in implementation
> from what Junio is suggesting but with one difference: in Junio's option
> the "identifier" will act as a default URL if no override is found.
>
I don't like using the URL as the key for one simple reason: while it
technically doesn't conflate the two cases of "I want to use a different
code base for this subproject starting in version X of the superproject"
and "I want to use the same code base I've been using all along, but it
has moved" (in that you can, as you point out, simply map the old URL to
a new one independent of the project's history) it does encourage people
to conflate the two in their minds.
Relatively few users will look at an identifier that is a valid URL and
think of it as anything but a URL, especially if, in the absence of any
overrides, the software (from the user's perspective) treats it as a
URL. The override capability is almost certain to remain obscure since
you won't need to use it in the normal case. Therefore, when the
submodule's home gets moved to a different host, the first thing a lot
of people are going to think to do is not to leave the submodule's
identifier (the original URL) alone and create a mapping config entry,
but rather to change the submodule to use a brand-new identifier that
happens to be the same as the new URL. At which point you're right back
to the original problem of checking out an old version of the
superproject and having it point to a now-nonexistent subproject.
That's why I suggested making the identifiers look nothing like URLs,
though of course to the extent they're arbitrary strings, one could use
a URL if one chose to. I don't object to the *capability* of using a URL
as an identifier in a three-level scheme like I described -- it would be
silly to forbid -- but I think it would be a dangerous convention to
establish because it will eventually encourage people to shoot
themselves in the foot for lack of knowing what's actually going on.
-Steve
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 11:08 ` Michael S. Tsirkin
2007-05-18 12:27 ` Josef Weidendorfer
2007-05-18 15:06 ` Aidan Van Dyk
@ 2007-05-19 12:50 ` Sven Verdoolaege
2007-05-21 1:10 ` Jakub Narebski
2 siblings, 1 reply; 55+ messages in thread
From: Sven Verdoolaege @ 2007-05-19 12:50 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Andy Parkins, git, Josef Weidendorfer, Junio C Hamano,
Nicolas Pitre
On Fri, May 18, 2007 at 02:08:04PM +0300, Michael S. Tsirkin wrote:
> How about an ability for git-daemon to get commands with git-config?
You mean something like dump-config ?
skimo
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 12:41 ` Petr Baudis
@ 2007-05-19 16:38 ` Jakub Narebski
0 siblings, 0 replies; 55+ messages in thread
From: Jakub Narebski @ 2007-05-19 16:38 UTC (permalink / raw)
To: Petr Baudis
Cc: Josef Weidendorfer, Michael S. Tsirkin, Junio C Hamano,
Andy Parkins, Nicolas Pitre, git
On Fri, 18 May 2007, Petr Baudis wrote:
> On Fri, May 18, 2007 at 02:00:07PM CEST, Jakub Narebski wrote:
>> There is a bit ugly solution for this: instead of using symbolic name
>> in versioned .gitmodules for a subproject (for a repo), use subproject
>> identifier (inode), and put it in the tag object (or config) together with
>> the URL. Git would then search all the subproject / submodule info for
>> a given inode. You could have more than one inode / identifier name for
>> a subproject repo; this would avoid the "independently created" issue
>> with using inodes / file-ids in distributed SCM. One would have to
>> ensure however that different subprojects get assigned different inodes.
>
> Well, then it doesn't make any difference, no? You just renamed the
> problem but it stays the same - to ensure uniqueness even across
> repositories.
>
> Ok, you can declare now that you will just think out a UUID for the
> subproject, but aside of not fitting well with the whole git philosophy,
> then you don't need the indirection again, just use the UUID as the tag
> name.
>
> I have the feeling that I'm missing something basic in your proposal...
I was thinking about _automatic_ UUID, generated by git. For example it
could be sha1 of first subproject commit which appeared in supermodule.
It is easy to check if two UUID correspond to the same repository:
check if both objects are present, or perhaps that one is reachable from
the other, or that they have common parent. This kind of UUID is not
that different from (global) SHA1 of object.
So the idea is to have versioned, i.e. in-tree mapping from directory
names to repositories via some kind of identifier: Junio idea of using
URL of repository, with possibility of overriding it in repo config,
the idea of using tag name, and having URL for repo in tag contents,
and my idea of tag name of tag containing UUID. To find the URL you
would search all the repo-tags for UUID, or for existence of commit
with given sha1.
But I haven't thought this idea through, so it migh be utter rubbish.
The porcelain part of subproject / submodule support is not that
easy, to cover for moving subproject "mountpoint", project changing URL,
conflict of project names and different naming of the same project etc.
--
Jakub Narebski
Poland
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-19 1:02 ` Steven Grimm
@ 2007-05-19 16:55 ` Josef Weidendorfer
0 siblings, 0 replies; 55+ messages in thread
From: Josef Weidendorfer @ 2007-05-19 16:55 UTC (permalink / raw)
To: Steven Grimm
Cc: Andy Parkins, git, Michael S. Tsirkin, Junio C Hamano,
Nicolas Pitre
On Saturday 19 May 2007, Steven Grimm wrote:
> Andy Parkins wrote:
> > Bear in mind that what you're suggesting is no different in implementation
> > from what Junio is suggesting but with one difference: in Junio's option
> > the "identifier" will act as a default URL if no override is found.
> >
>
> I don't like using the URL as the key for one simple reason:
> ...
Another argument against naming the key for subprojects "URL" in
config/.gitmodules:
It can happen quite easily that a superprojects includes 2 subprojects
which really are only different branches of the same project, e.g.
GCC 4.1 and GCC 4.2 branch, e.g. to do regression testing with different
compiler versions.
But these two subprojects would be cloned from exactly the same URL.
So you artificially have to change one of the two URLs for this to
work, already at the start of your subproject.
The same example shows that the SHA1 of a projects root commit can not
work as a subproject key.
Josef
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 17:00 ` Junio C Hamano
@ 2007-05-19 18:12 ` Michael S. Tsirkin
2007-05-19 19:56 ` Junio C Hamano
0 siblings, 1 reply; 55+ messages in thread
From: Michael S. Tsirkin @ 2007-05-19 18:12 UTC (permalink / raw)
To: Junio C Hamano
Cc: Josef Weidendorfer, Andy Parkins, git, Michael S. Tsirkin,
Nicolas Pitre, Steven Grimm
> Fetching from a new URL (not just "different from what is
> defined in .gitmodules") is a major deal from security point of
> view (you should not fetch from stranger you do not trust).
I'm sorry, I'm confused. I thought the "URL" in .gitmodules
is just a unique project key/name? So how come you are now
speaking about fetching from it?
--
MST
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-19 18:12 ` Michael S. Tsirkin
@ 2007-05-19 19:56 ` Junio C Hamano
0 siblings, 0 replies; 55+ messages in thread
From: Junio C Hamano @ 2007-05-19 19:56 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Josef Weidendorfer, Andy Parkins, git, Nicolas Pitre,
Steven Grimm
"Michael S. Tsirkin" <mst@dev.mellanox.co.il> writes:
>> Fetching from a new URL (not just "different from what is
>> defined in .gitmodules") is a major deal from security point of
>> view (you should not fetch from stranger you do not trust).
>
> I'm sorry, I'm confused. I thought the "URL" in .gitmodules
> is just a unique project key/name? So how come you are now
> speaking about fetching from it?
Sorry for confusing you. The point was by default that we
should not blindly follow URL given from upstream -- the
statement you quoted is one justification why my strawman uses
the URL in .gitmodules as a mere hint and look-up key.
Having said that, I'd ask not to take minor details in the
strawman too literally and seriously. I am 100% sure that we
would be in a serious trouble if what we end up doing matches
literally what my handwaving strawman suggested. The strawman
was thrown out to the open primarily so that (smarter and more
beautiful) people who thought the issues longer and harder to
express their opinions easier by having something to compare
their unique ideas against, nothing more.
I am slightly more than 50% sure that we would not want to tie
subproject fetch/clone into superproject fetch/clone, and _if_
we would tie it to anything, it would be to the checkout, but
that is only my gut feeling. Maybe we end up not tying
subproject fetch/clone to anything that happens in the
superproject; we may even do it in a completely different way
than the strawman said it _might_ work. That's perfectly fine.
The expectation from me sending out that handwaving strawman was
to help encouraging others to present their ideas, with
justifications. And having something to compare against, even
if it is just a handwaving strawman, is often much easier when
presenting your ideas and showing which part of your design is
important. You can say something like "the strawman fails in
this scenario, which is important in real life for such and such
reasons, and my design handles it this way" -- and everybody
can discuss if it is an important design consideration, and what
the best design to solve that problem if it is.
So don't take that strawman, especially the details in it, too
seriously, but take it as what it was: a firestarter.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-18 18:45 ` Junio C Hamano
@ 2007-05-20 0:16 ` Petr Baudis
2007-05-25 9:55 ` News reader woes (was: Re: [3/4] What's not in 1.5.2 (new topics)) Jakub Narebski
0 siblings, 1 reply; 55+ messages in thread
From: Petr Baudis @ 2007-05-20 0:16 UTC (permalink / raw)
To: Jakub Narebski; +Cc: Julian Phillips, Junio C Hamano, git
On Fri, May 18, 2007 at 08:45:16PM CEST, Junio C Hamano wrote:
> Julian Phillips <julian@quantumfyre.co.uk> writes:
>
> > On Fri, 18 May 2007, Junio C Hamano wrote:
> >
> >> Jakub Narebski <jnareb@gmail.com> writes:
> >>
> >>> [Cc: Petr Baudis <pasky@suse.cz>, Josef Weidendorfer
> >>> <Josef.Weidendorfer@gmx.de>, "Michael S. Tsirkin" <mst@dev.mellanox.co.il>,
> >>> Junio C Hamano <junkio@cox.net>, Andy Parkins <andyparkins@gmail.com>,
> >>> Nicolas Pitre <nico@cam.org>, git@vger.kernel.org]
> >>
> >> Offtopic. Why do you do this, and what benefit are you or
> >> anybody in the above list, which is in body part of the message,
> >> getting?
> >
> > It looks like he is posting through gmane using a news reader ... so
> > the list post comes from gmane while the CCs go out directly (I
> > assume).
>
> Ah, I see. The names listed on that in-body CC: do appear on
> the To: in the copy of the message that came via e-mail. If
> that is how gmane operates then there is nothing Jakub to do to
> improve it, I guess...
>
> Thanks for the clarification.
Actually, Jakub, if it can be turned off, could you, please?
Not getting cc'd on replies is slightly annoying. But this is highly
confusing - suddenly I must take care _not_ to reply to the private
copies, and we actually do have a parallel subthread of replies to your
mail not cc'd to the mailing list. :-(
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Ever try. Ever fail. No matter. // Try again. Fail again. Fail better.
-- Samuel Beckett
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [3/4] What's not in 1.5.2 (new topics)
2007-05-19 12:50 ` Sven Verdoolaege
@ 2007-05-21 1:10 ` Jakub Narebski
0 siblings, 0 replies; 55+ messages in thread
From: Jakub Narebski @ 2007-05-21 1:10 UTC (permalink / raw)
To: git
Sven Verdoolaege wrote:
> On Fri, May 18, 2007 at 02:08:04PM +0300, Michael S. Tsirkin wrote:
>> How about an ability for git-daemon to get commands with git-config?
>
> You mean something like dump-config ?
Why not use tags, e.g. refs/tags/config tag to blob, or lightweight
tag to blob?
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 55+ messages in thread
* News reader woes (was: Re: [3/4] What's not in 1.5.2 (new topics))
2007-05-20 0:16 ` Petr Baudis
@ 2007-05-25 9:55 ` Jakub Narebski
0 siblings, 0 replies; 55+ messages in thread
From: Jakub Narebski @ 2007-05-25 9:55 UTC (permalink / raw)
To: Petr Baudis; +Cc: Julian Phillips, Junio C Hamano, git
On Sun, 20 May 2007, Petr Baudis <pasky@suse.cz> wrote:
> On Fri, May 18, 2007 at 08:45:16PM CEST, Junio C Hamano wrote:
>> Julian Phillips <julian@quantumfyre.co.uk> writes:
>>> On Fri, 18 May 2007, Junio C Hamano wrote:
>>>> Jakub Narebski <jnareb@gmail.com> writes:
>>>>
>>>>> [Cc: Petr Baudis <pasky@suse.cz>, Josef Weidendorfer
>>>>> <Josef.Weidendorfer@gmx.de>, "Michael S. Tsirkin" <mst@dev.mellanox.co.il>,
>>>>> Junio C Hamano <junkio@cox.net>, Andy Parkins <andyparkins@gmail.com>,
>>>>> Nicolas Pitre <nico@cam.org>, git@vger.kernel.org]
>>>>
>>>> Offtopic. Why do you do this, and what benefit are you or
>>>> anybody in the above list, which is in body part of the message,
>>>> getting?
>>>
>>> It looks like he is posting through gmane using a news reader ... so
>>> the list post comes from gmane while the CCs go out directly (I
>>> assume).
>>
>> Ah, I see. The names listed on that in-body CC: do appear on
>> the To: in the copy of the message that came via e-mail. If
>> that is how gmane operates then there is nothing Jakub to do to
>> improve it, I guess...
>>
>> Thanks for the clarification.
>
> Actually, Jakub, if it can be turned off, could you, please?
>
> Not getting cc'd on replies is slightly annoying. But this is highly
> confusing - suddenly I must take care _not_ to reply to the private
> copies, and we actually do have a parallel subthread of replies to your
> mail not cc'd to the mailing list. :-(
The problem, and mentioned above trying to overcome it, lies in
complicated interaction between the GMane news to email gateway,
vger mail filtering (spam protection rules) and the _news_ reader
I use, namely KNode 0.10.2 from KDE 3.5.3.
I read git mailing list via GMane NNTP (Usenet, news) interface:
nntp://gmane.comp.version-control.git
as I respond only rarely. I start new threads using email, and
if I get reply via email I try to reply also from mail client, not
via news. However, when replying to message which I read only via
NNTP interface, replying in news client, I have option of sending
reply only to gmane.comp.version-control.git which means sending
email only to git mailing list and breaking Cc: list.
Another option is to copy Cc: list manually to To: field (no Cc:
in this version of KNode), and have gmane.comp.version-control.git
in the Group: field. The fact that there is no Cc: to set is the
problem of KNode. The problem with GMane and vger interaction lies
in the fact that I _cannot_ put git@vger.kernel.org in the To: list,
as somehow vger rejects mails sent via GMane (it does not rejects
news messages send via GMane).
I could also copy whole message to mail client, but this would break
In-Reply-To: and references: headers, thus breaking threading.
Do I understand correctly that you prefer 1st option, namely replying
only to newsgroup / git mailing list?
Note that changing news client is as hard as changing email client:
you would like to migrate configuration, news state (read/unread
articles) and sent/drafts folders to new news client. Not that easy.
--
Jakub Narebski
Poland
^ permalink raw reply [flat|nested] 55+ messages in thread
end of thread, other threads:[~2007-05-25 9:51 UTC | newest]
Thread overview: 55+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-16 22:47 [0/4] What's not in 1.5.2 (overview) Junio C Hamano
2007-05-16 22:47 ` [1/4] What's not in 1.5.2 (have been cooking in next) Junio C Hamano
2007-05-16 22:47 ` [2/4] What's not in 1.5.2 (will cook " Junio C Hamano
2007-05-16 22:47 ` [3/4] What's not in 1.5.2 (new topics) Junio C Hamano
2007-05-17 4:39 ` Andy Parkins
2007-05-17 5:21 ` Junio C Hamano
2007-05-17 7:51 ` Andy Parkins
2007-05-17 11:02 ` Alex Riesen
2007-05-17 12:46 ` Petr Baudis
2007-05-17 13:46 ` Jeff King
2007-05-17 16:10 ` Petr Baudis
2007-05-17 16:25 ` Jeff King
2007-05-17 17:30 ` Petr Baudis
2007-05-17 17:35 ` Jeff King
2007-05-17 18:49 ` Junio C Hamano
2007-05-18 12:58 ` Jeff King
2007-05-17 18:47 ` Junio C Hamano
2007-05-17 13:45 ` Nicolas Pitre
2007-05-17 21:58 ` Michael S. Tsirkin
2007-05-17 23:41 ` Josef Weidendorfer
2007-05-18 0:32 ` Steven Grimm
2007-05-18 4:50 ` Petr Baudis
2007-05-18 9:18 ` Josef Weidendorfer
2007-05-19 0:56 ` Torgil Svensson
2007-05-18 12:00 ` Jakub Narebski
2007-05-18 12:41 ` Petr Baudis
2007-05-19 16:38 ` Jakub Narebski
2007-05-18 18:37 ` Junio C Hamano
2007-05-18 18:40 ` Julian Phillips
2007-05-18 18:45 ` Junio C Hamano
2007-05-20 0:16 ` Petr Baudis
2007-05-25 9:55 ` News reader woes (was: Re: [3/4] What's not in 1.5.2 (new topics)) Jakub Narebski
2007-05-18 7:57 ` [3/4] What's not in 1.5.2 (new topics) Andy Parkins
2007-05-18 8:43 ` Josef Weidendorfer
2007-05-18 9:21 ` Andy Parkins
2007-05-18 11:08 ` Michael S. Tsirkin
2007-05-18 12:27 ` Josef Weidendorfer
2007-05-18 12:46 ` Michael S. Tsirkin
2007-05-18 15:06 ` Aidan Van Dyk
2007-05-18 15:31 ` Michael S. Tsirkin
2007-05-19 12:50 ` Sven Verdoolaege
2007-05-21 1:10 ` Jakub Narebski
2007-05-18 17:00 ` Junio C Hamano
2007-05-19 18:12 ` Michael S. Tsirkin
2007-05-19 19:56 ` Junio C Hamano
2007-05-18 8:57 ` Michael S. Tsirkin
2007-05-18 9:40 ` Andy Parkins
2007-05-18 10:16 ` Johannes Sixt
2007-05-18 11:22 ` Michael S. Tsirkin
2007-05-18 12:36 ` Andy Parkins
2007-05-19 1:02 ` Steven Grimm
2007-05-19 16:55 ` Josef Weidendorfer
[not found] ` <200705181524.40705.Josef.Weidendorfer@gmx.de>
[not found] ` <20070518133922.GK4708@mellanox.co.il>
[not found] ` <200705181751.15435.Josef.Weidendorfer@gmx.de>
2007-05-18 16:08 ` Petr Baudis
2007-05-18 16:21 ` Michael S. Tsirkin
2007-05-16 22:47 ` [4/4] What's not in 1.5.2 (other bits and pieces) Junio C Hamano
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 NNTP newsgroup(s).