Annotation of wikisrc/mailing-lists/tech-repository.mdwn, revision 1.14
1.1 spz 1: ## Requirements
2:
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:
4:
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
1.3 spz 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
1.1 spz 16:
17: Please add/correct.
18:
19: ***
20:
1.2 spz 21: ## Experiences in using the software
22:
1.9 asau 23: ### Experiences with Fossil
24:
25: #### Aleksej Saushev (asau)
26:
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".
32:
33: For now Fossil lacks some essential features and has other severe problems:
1.10 asau 34:
1.14 ! asau 35: 1. Many operations require javascript-capable web browser.
1.9 asau 36: 1. No support for vendor branches.
1.11 wiki 37: * Redundant to "There's no support for importing vendor source"?
1.12 asau 38: * No, it is different. I would import manually, if only some support were there.
1.9 asau 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.
1.11 wiki 41: * Fixed in [4e3cd6ce4e].
1.12 asau 42: * 2010-11-08, not in pkgsrc.
1.9 asau 43: 1. There's no support for importing vendor source,
44: even "addremove" command isn't in trunk at the time of writing.
1.11 wiki 45: * It has been merged to trunk and is part of the pkgsrc version.
1.12 asau 46: * No, it isn't part of pkgsrc version at the moment, TIAS.
1.13 wiki 47: * Sorry, you are right. Merged to trunk in [ceab53718f].
1.9 asau 48: 1. Merge state sticks. You can't undo it.
1.11 wiki 49: * Not sure what you mean, but "revert" resets the merge state since [d13054ce84].
1.12 asau 50: * This is quite recent (late October) fix, I didn't check it.
1.9 asau 51: 1. You can't amend your source when you've just merged, you are forced to commit after merge.
1.11 wiki 52: * To clarify, the merge has to be committed first, no separate commits are possible from the checkout before that.
1.14 ! asau 53: * In practice this makes _critical_ defect in combination of "fossil diff" inability to generate difference for added files.
1.9 asau 54: 1. You can't tune diff command to ignore RCS keywords.
1.11 wiki 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.
1.14 ! asau 56: * Since there's no external diff program that supports it, it is really not quite easy.
1.9 asau 57: 1. You can't diff single file between two given versions.
1.11 wiki 58: * diff --from version1 --to version2 path/to/file
1.12 asau 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.)
1.9 asau 60: 1. There's no way to change commit messages.
1.13 wiki 61: * easily done via ui: select a commit and under "Other Links" you can find "Edit" (given the necessary permissions).
1.12 asau 62: * How? It should be possible via command line nevertheless.
1.9 asau 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.
1.11 wiki 65: * fossil info <commitid>
1.12 asau 66: * This isn't about "info" command, it is about "timeline"
1.13 wiki 67: --> Please clarify what you mean.
1.12 asau 68: * BTW, this command doesn't support "-R" flag, perhaps you have to check the source out to use it.
1.13 wiki 69: 1. Commands are under-documented, usage messages don't list many available options.
1.9 asau 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.
1.11 wiki 72: * fossil ui and use a web browser
1.12 asau 73: * We don't have web browser in base system, this information should be accessible with command line.
1.9 asau 74:
1.14 ! asau 75:
1.9 asau 76: Some of above problems are reported.
77:
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.
80:
1.2 spz 81: ### Experiences with git
82:
83: please fill in
84:
85: ### Experiences with Subversion
86:
87: please fill in
88:
1.8 wiki 89: ### Experiences with Bazaar
90:
91: #### Jonathan Perkin (sketch)
92:
93: We use bzr at work (MySQL), and while it has a number of problems, it does make dev work easy.
94:
95: The Good
96:
97: * easy to use
98: * shared repositories keep local disk usage down
99: * commercial backing (Canonical)
100: * cross-platform (works on Windows)
101: * numerous GUI available
102:
103: The Bad:
104:
105: * slow
106: * requires python
107:
108: The Ugly:
109:
110: * can be really slow
111: * changing repository formats is a hassle
112:
113: A basic example workflow
114:
115: <pre>
116: # create a local shared repository. all objects are held in a .bzr sub-directory, with branches essentially a lightweight checkout
117: $ bzr init-repo bzr
118: $ cd bzr
119:
120: # fetch HEAD, will take a long time, depending on connectivity
121: $ bzr branch bzr+ssh://bzr.netbsd.org/netbsd-trunk
122:
123: # 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
124: $ bzr branch bzr+ssh://bzr.netbsd.org//netbsd-5
125:
126: # ok, let's do some dev work
127: $ bzr branch netbsd-trunk netbsd-trunk-sketch-fix-msk
128: $ cd netbsd-trunk-sketch-fix-msk; hack hack hack
129:
130: # the usual cycle of hack/commit/merge
131: $ bzr diff # show uncommitted diffs
132: $ bzr commit # commit to local clone
133: $ bzr merge ../netbsd-trunk # update clone to latest local trunk, OR
134: $ bzr merge bzr+ssh://bzr.netbsd.org/netbsd-trunk # merge directly from upstream
135:
136: # publish our tree for others to review/hack on
137: $ bzr push bzr+ssh://bzr.netbsd.org/netbsd-trunk-fix-msk
138:
139: # got reviewed/tested, let's push it
140: $ bzr merge bzr+ssh://bzr.netbsd.org/netbsd-trunk
141: $ bzr missing bzr+ssh://bzr.netbsd.org/netbsd-trunk # show changeset differences
142: $ bzr push bzr+ssh://bzr.netbsd.org/netbsd-trunk
143: </pre>
144:
145: I personally find this approach a lot more natural than git's way of managing branches itself inside a single working directory.
146:
1.2 spz 147: ***
148:
1.1 spz 149: ## Conversion experiences
150:
1.6 wiki 151: ### git
152:
1.5 wiki 153: Conversion of all modules to git succeeded using fromcvs togit. The resulting git repository of src contains several errors where files have a wrong version (eg in hunt/Makefile the contents of the file on the vendor branch appear as tip of the master branch, which is quite wrong).
154: There have been no reports of errors in the other modules; this may be due to a lack of testing.
1.6 wiki 155:
156: ### hg
157:
158: Conversion of src failed. Afair the rest worked when using Mercurial 1.3.*. Alas, fromcvs tohg is not compatible with Mercurial 1.4 which is in pkgsrc now and is the version to use with Python 2.6 (afair). Two identified problems:
159: <pre>
160: self.ui = ui.ui(interactive = False)
161: </pre>
162: wants to be
163: <pre>
164: self.ui = ui.ui()
165: self.ui.setconfig('ui', 'interactive', 'off')
166: </pre>
167: in /usr/pkg/share/fromcvs/tohg.py line 10 (easily fixed, obviously)
168: and
169: <pre>
170: n = self.hgrepo.commit(files = files,
171: text = text,
172: user = user,
173: date = "%s 0" % date,
174: p1 = p1,
175: p2 = p2,
176: extra = {'branch': branch})
177: </pre>
178: needs to be replaces with something that works with the 1.4 commit that looks like this:
179: <pre>
180: def commit(self, text="", user=None, date=None, match=None, force=False,
181: editor=False, extra={}):
182: </pre>
183: which is where I remembered that I wasn't planning to learn Python this week.
184:
185: Next try: hg convert on pkgsrc
186: <pre>
187: --- /usr/pkg/lib/python2.6/site-packages/hgext/convert/cvsps.py 2009-12-02 01:30:45.000000000 +0000
188: +++ /tmp/cvsps.py 2010-01-20 12:52:11.000000000 +0000
189: @@ -271,14 +271,14 @@
190: tags[rev].append(match.group(1))
191: branchmap[match.group(1)] = match.group(2)
192:
193: - elif re_31.match(line):
194: + elif re_31.match(line) and re_50.match(peek):
195: state = 5
196: elif re_32.match(line):
197: state = 0
198:
199: elif state == 4:
200: # expecting '------' separator before first revision
201: - if re_31.match(line):
202: + if re_31.match(line) and re_50.match(peek):
203: state = 5
204: else:
205: assert not re_32.match(line), _('must have at least '
206: @@ -357,7 +357,7 @@
207:
208: elif state == 8:
209: # store commit log message
210: - if re_31.match(line):
211: + if re_31.match(line) and re_50.match(peek):
212: state = 5
213: store = True
214: elif re_32.match(line):
215: </pre>
216: helps it to cope with the output of cvs rlog -N -r1.66 pkgsrc/databases/rrdtool/Makefile (that's the easy one)
217: but then it tries to parse the output of (eg) cvs rlog -N -r1.19 pkgsrc/graphics/dcraw/Makefile and it's not clear
218: to me how it could hope to get that one right just from cvs rlog, and all alternatives are going to be rather tedious
1.7 wiki 219: and I'm still not planning to learn Python this week. If you feel more energetic, feel free to hand over patches.
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb