1: ## Requirements
3: A list of requirements for a possible replacement for CVS as repo software for NetBSD and pkgsrc so we don't keep starting over listing these (and forgetting half) all of the time:
5: - the license would be nice to be BSDish, must be open source and free to use
6: - the software should be includeable in NetBSD base without too much excess baggage
7: - it should be possible to do development on old or small hardware
8: - it must support automated updating of source trees
9: - it must support branches
10: - there should be a conversion for the present history (that actually works)
11: - the resulting repository must not break easily
12: - the software should be reasonably mature and reliable
13: - checkout of a pkgsrc tree must be feasible on a 32MB system
14: - checkout of a stable pkgsrc tree and then updating select package subdirs to the latest version of the main branch should be possible
15: - lasting removal of legally tainted code must be possible
17: Please add/correct.
21: ## Experiences in using the software
23: ### Experiences with Fossil
25: #### Aleksej Saushev (asau)
27: I started using it before conversion tool were available
28: (basically it isn't available yet, to my knowledge Joerg is working on it),
29: in addition I wanted to start as soon as possible
30: and to try operation with no conversion tool available.
31: Thus I've tried to simulate working with "vendor branches".
33: For now Fossil lacks some essential features and has other severe problems:
36: 1. No support for vendor branches.
37: * Redundant to "There's no support for importing vendor source"?
38: * No, it is different. I would import manually, if only some support were there.
39: 1. It is impossible to merge between trees growing from the very root.
40: The initial commit is too special, this prevents using these trees for vendor branches.
41: * Fixed in [4e3cd6ce4e].
42: * 2010-11-08, not in pkgsrc.
43: 1. There's no support for importing vendor source,
44: even "addremove" command isn't in trunk at the time of writing.
45: * It has been merged to trunk and is part of the pkgsrc version.
46: * No, it isn't part of pkgsrc version at the moment, TIAS.
47: * Sorry, you are right. Merged to trunk in [ceab53718f].
48: 1. Merge state sticks. You can't undo it.
49: * Not sure what you mean, but "revert" resets the merge state since [d13054ce84].
50: * This is quite recent (late October) fix, I didn't check it.
51: 1. You can't amend your source when you've just merged, you are forced to commit after merge.
52: * To clarify, the merge has to be committed first, no separate commits are possible from the checkout before that.
53: * In practice this makes _critical_ defect in combination of "fossil diff" inability to generate difference for added files.
54: 1. You can't tune diff command to ignore RCS keywords.
55: * Since RCS keywords are not really a native command, it is no surprise. An external diff program can be used for this purpose though.
56: * Since there's no external diff program that supports it, it is really not quite easy.
57: 1. You can't diff single file between two given versions.
58: * diff --from version1 --to version2 path/to/file
59: * That didn't work, and I'm not sure it works now. It used to ignore path-to-file argument. (It used to bail out when both "--from" and "--to" were used.)
60: 1. There's no way to change commit messages.
61: * easily done via ui: select a commit and under "Other Links" you can find "Edit" (given the necessary permissions).
62: * How? It should be possible via command line nevertheless.
63: 1. There's no documented way to select commit messages of current branch, or branch by given commit id.
64: Or there's a bug preventing it.
65: * fossil info <commitid>
66: * This isn't about "info" command, it is about "timeline"
67: --> Please clarify what you mean.
68: * BTW, this command doesn't support "-R" flag, perhaps you have to check the source out to use it.
69: 1. Commands are under-documented, usage messages don't list many available options.
70: This applies to trunk at least, there's a branch that states documentation as its goal.
71: 1. There's no convenient way to look at commit contents: files affected, diff.
72: * fossil ui and use a web browser
73: * We don't have web browser in base system, this information should be accessible with command line.
76: Some of above problems are reported.
78: Note, all problems above are usability problems, I didn't explore e.g. scalability,
79: Joerg did and had problems, but this is another story.
81: ### Experiences with git
83: Experience with the imported repositories on morden:
85: - no problem in principle with the smaller modules like othersrc or htdocs (CVS tags are one off but that is expected)
86: - the large repos are really fragile, and gits idea of how to fix a broken repo seems to be to retrieve a copy from someone/somewhere that happens to not be broken
88: ### Experiences with Subversion
90: please fill in
92: ### Experiences with Bazaar
94: #### Jonathan Perkin (sketch)
96: We use bzr at work (MySQL), and while it has a number of problems, it does make dev work easy.
98: The Good
100: * easy to use
101: * shared repositories keep local disk usage down
102: * commercial backing (Canonical)
103: * cross-platform (works on Windows)
104: * numerous GUI available
106: The Bad:
108: * slow
109: * requires python
111: The Ugly:
113: * can be really slow
114: * changing repository formats is a hassle
116: A basic example workflow
119: # create a local shared repository. all objects are held in a .bzr sub-directory, with branches essentially a lightweight checkout
120: $ bzr init-repo bzr
121: $ cd bzr
123: # fetch HEAD, will take a long time, depending on connectivity
124: $ bzr branch bzr+ssh://bzr.netbsd.org/netbsd-trunk
126: # fetch netbsd-5, as we already have the majority of the code in netbsd-trunk (and therefore .bzr), this takes a fraction of the time
127: $ bzr branch bzr+ssh://bzr.netbsd.org//netbsd-5
129: # ok, let's do some dev work
130: $ bzr branch netbsd-trunk netbsd-trunk-sketch-fix-msk
131: $ cd netbsd-trunk-sketch-fix-msk; hack hack hack
133: # the usual cycle of hack/commit/merge
134: $ bzr diff # show uncommitted diffs
135: $ bzr commit # commit to local clone
136: $ bzr merge ../netbsd-trunk # update clone to latest local trunk, OR
137: $ bzr merge bzr+ssh://bzr.netbsd.org/netbsd-trunk # merge directly from upstream
139: # publish our tree for others to review/hack on
140: $ bzr push bzr+ssh://bzr.netbsd.org/netbsd-trunk-fix-msk
142: # got reviewed/tested, let's push it
143: $ bzr merge bzr+ssh://bzr.netbsd.org/netbsd-trunk
144: $ bzr missing bzr+ssh://bzr.netbsd.org/netbsd-trunk # show changeset differences
145: $ bzr push bzr+ssh://bzr.netbsd.org/netbsd-trunk
148: I personally find this approach a lot more natural than git's way of managing branches itself inside a single working directory.
152: ## Conversion
154: ### fossil
156: We have a successful conversion from cvs to fossil since ~mid 2011, mostly thanks to the work of Jörg Sonnenberger.
157: See [[github]] for more details.
159: ### git
161: We have a successful conversion to git via the fossil conversion; also, probably now a successful direct conversion via the tools by Eric S. Raymond.
162: See [[github]] for more details.
164: ### hg
166: A conversion to hg has also been done, ask agc@
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb