f7a410eca9 2008-10-18 drh: From: "Ralf S. Engelschall" f7a410eca9 2008-10-18 drh: Date: October 18, 2008 1:40:53 PM EDT f7a410eca9 2008-10-18 drh: To: drh@hwaci.com f7a410eca9 2008-10-18 drh: Subject: Some Fossil Feedback f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: I've today looked at your Fossil project (latest version from your f7a410eca9 2008-10-18 drh: repository). That's a _really_ interesting and very promising DVCS. f7a410eca9 2008-10-18 drh: While I looked around and tested it, I stumbled over some issues I want f7a410eca9 2008-10-18 drh: to share with you: f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o No tarball f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: You currently still do not provide any tarballs of the Fossil sources. f7a410eca9 2008-10-18 drh: Sure, you are still hacking wild on the code and one can on-the-fly f7a410eca9 2008-10-18 drh: fetch a ZIP archive, but that's a manual process. For packagers (like f7a410eca9 2008-10-18 drh: me in the OpenPKG project) this is very nasty and just means that f7a410eca9 2008-10-18 drh: Fossil will usually still not be packaged. As a result it will be not f7a410eca9 2008-10-18 drh: spreaded as much as possible and this way you still do not get as much f7a410eca9 2008-10-18 drh: as possible feedback. Hence, I recommend that you let daily snapshot f7a410eca9 2008-10-18 drh: tarballs (or ZIP files) be rolled. This would be great. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o UUID f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Under http://www.fossil-scm.org/index.html/doc/tip/www/concepts.wiki f7a410eca9 2008-10-18 drh: you describe the concepts and you clearly name the artifact ID a f7a410eca9 2008-10-18 drh: "UUID" and even say that this is a "Universally Unique Identifier". f7a410eca9 2008-10-18 drh: Unfortunately, a UUID is a 128-bit entity standardized by the ISO f7a410eca9 2008-10-18 drh: (under ISO/IEC 11578:1996) and IETF (under RFC-4122) and hence it is f7a410eca9 2008-10-18 drh: *VERY MUCH* confusing and unclean that your 160-bit SHA1-based ID is f7a410eca9 2008-10-18 drh: called "UUID" in Fossil. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: I *STRONGLY* recommend you to either use real UUIDs (128-bit f7a410eca9 2008-10-18 drh: entities, where a UUID of version 5 even is SHA1-based!) or you name f7a410eca9 2008-10-18 drh: your 160-bit SHA1 entities differently (perhaps AID for "Artifact f7a410eca9 2008-10-18 drh: Identifier"?). f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "fossil cgi <script>" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Currently we have only "fossil cgi <script>" where <script> contains f7a410eca9 2008-10-18 drh: "repository: <file>". This is a neat idea and should be kept. But f7a410eca9 2008-10-18 drh: this way one cannot easily host multiple repositories over this f7a410eca9 2008-10-18 drh: CGI interface without creating such a script for every individual f7a410eca9 2008-10-18 drh: repository. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Perhaps a "fossil cgi --repository <file>" would help here, as this f7a410eca9 2008-10-18 drh: way one can use a generic CGI script which first figures out the f7a410eca9 2008-10-18 drh: name <name> of the individual project and then runs "fossil cgi f7a410eca9 2008-10-18 drh: --repository /path/to/repositories/<name>.db". But perhaps I'm just f7a410eca9 2008-10-18 drh: overlooking something and this is already possible... f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "fossil db <operation>" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: In Monotone DVCS we have a "mtn db" command for the low-level SQLite f7a410eca9 2008-10-18 drh: database manipulations. For instance a "mtn --db=<monotone-repository> f7a410eca9 2008-10-18 drh: db dump" is more or less equal to a "sqlite3 <monotone-repository> f7a410eca9 2008-10-18 drh: .dump". A "mtn --db=<monotone-repository> db exec '<SQL>'" is equal f7a410eca9 2008-10-18 drh: "echo '<SQL>' | sqlite3 <monotone-repository>", etc. The point is f7a410eca9 2008-10-18 drh: that the DVCS user usually has no SQLite CLI at hand but as the DVCS f7a410eca9 2008-10-18 drh: already contains more or less the complete SQLite it is very useful to f7a410eca9 2008-10-18 drh: also include the SQLite CLI functionality and wire it into the DVCS f7a410eca9 2008-10-18 drh: CLI via a "db" command. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "fossil version" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Mostly all VCS I know if either support a command "version" or a f7a410eca9 2008-10-18 drh: command-line option "--version" or most of the time even both. Please f7a410eca9 2008-10-18 drh: output the "This is fossil version [9e80dc66cf] 2008-10-18 13:03:36" f7a410eca9 2008-10-18 drh: there (at least additionally) instead of at the end of "fossil help". f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "--port" vs. "-port" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: In the "fossil help server" there is "--port" while under f7a410eca9 2008-10-18 drh: http://www.fossil-scm.org/index.html/doc/tip/www/quickstart.wiki there f7a410eca9 2008-10-18 drh: is "-port". I personally like GNU-long-style options "--xxxx" more f7a410eca9 2008-10-18 drh: than the CC-style options "-xxx". But anyway, independent which one is f7a410eca9 2008-10-18 drh: correct (well, perhaps both even work) only one should be documented f7a410eca9 2008-10-18 drh: to avoid confusion. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o User creation on the CLI f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: There is "fossil user new ?USERNAME?" which interactively prompts f7a410eca9 2008-10-18 drh: for the capabilities and the password -- even from the TTY and not f7a410eca9 2008-10-18 drh: from STDIN. One needs "fossil user new ?USERNAME? ?CAPABILITIES? f7a410eca9 2008-10-18 drh: ?PASSWORD?" to be able to create a repository in batch without having f7a410eca9 2008-10-18 drh: to hack the user into the "user" table via the SQLite CLI. Similar: f7a410eca9 2008-10-18 drh: the "fossil user password USERNAME" should be actually "fossil user f7a410eca9 2008-10-18 drh: password USERNAME ?PASSWORD?", please. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "-R <repository" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: There is the "-R" option for specifiying the repository. But it is f7a410eca9 2008-10-18 drh: a sub-command option and not a global option. And on "fossil ui" or f7a410eca9 2008-10-18 drh: "fossil server" it even is an argument and not an option. This is f7a410eca9 2008-10-18 drh: confusing. Every time one has to figure out how to set the repository f7a410eca9 2008-10-18 drh: on the CLI. Monotone simply uses a *global* option "--db" and that's f7a410eca9 2008-10-18 drh: it. So, I recommend that Fossil also uses a single global option f7a410eca9 2008-10-18 drh: "--repository"/"-R" instead of a command-specific option. Sure, not f7a410eca9 2008-10-18 drh: all commands might require a repository, but IMHO it is better to f7a410eca9 2008-10-18 drh: ignore the global option there than having to figure out every time f7a410eca9 2008-10-18 drh: how the repository has to be specified. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o Setup pages f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: When hitting "Apply changes" on any setup page, one keeps staying on f7a410eca9 2008-10-18 drh: this page. Sure, that's what an "apply" button usually is about. But f7a410eca9 2008-10-18 drh: I at least would have liked to see a button (either instead of the f7a410eca9 2008-10-18 drh: "apply changes" or at least in addition) which applies the changes and f7a410eca9 2008-10-18 drh: goes back to the setup main page (from where one usually come). f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o _FOSSIL_ f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Very nice idea to use another SQLite database for the _FOSSIL_ f7a410eca9 2008-10-18 drh: control file. BUT: Why "_FOSSIL_"? CVS's "CVS" directory was ugly for f7a410eca9 2008-10-18 drh: decades. Today we have ".svn", ".git", ".hg" and "_MTN"/".mtn" to get f7a410eca9 2008-10-18 drh: rid of those ugly control files or directories of the DVCS! Sure, f7a410eca9 2008-10-18 drh: dot-files are disliked by Windows people. But that's no problem, one f7a410eca9 2008-10-18 drh: can accept "_XXX" in addition to ".XXX" easily, of course. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: So, I really would like to see the file "_FOSSIL_" to be renamed f7a410eca9 2008-10-18 drh: to ".fossil" under Unix and "_fossil" under Windows or (if the f7a410eca9 2008-10-18 drh: upper-case is important to you) ".FOSSIL" and "_FOSSIL". But to see f7a410eca9 2008-10-18 drh: an ugly "_FOSSIL_" at the top of every source tree is really rather f7a410eca9 2008-10-18 drh: boring for Unix people! f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "fossil open", "fossil checkout", "fossil update". f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: I'm personally confused that "fossil open" is what "checkout" does in f7a410eca9 2008-10-18 drh: other DVCS and that "checkout" is just a variant of "update". Hmmm... f7a410eca9 2008-10-18 drh: for me it looks at least one should be eleminated to reduce confusion. f7a410eca9 2008-10-18 drh: The difference between checkout and update could become an option of f7a410eca9 2008-10-18 drh: a single option. And the remaining to perhaps better should be either f7a410eca9 2008-10-18 drh: "open" + "update" or "checkout" + "update". Well, perhaps I'm still f7a410eca9 2008-10-18 drh: not understanding Fossil enough. But I can only tell that I got rather f7a410eca9 2008-10-18 drh: confused. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "fossil commit" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: There is "fossil commit" but no short-hand "fossil ci". But there f7a410eca9 2008-10-18 drh: is "fossil status" and even just "fossil st" which clearly shows f7a410eca9 2008-10-18 drh: that Fossil allows abbreviations or at least prefix-matching on the f7a410eca9 2008-10-18 drh: commands. Sure, "ci" is not a prefix of "commit" but mostly all VCS f7a410eca9 2008-10-18 drh: support the good old RCS/CVS "ci" and similar aliases. So I recommend f7a410eca9 2008-10-18 drh: that Fossil does not only alias matching, but also provides aliases: f7a410eca9 2008-10-18 drh: "ci" for "commit", "co" for "checkout", "log" for "timeline", etc. f7a410eca9 2008-10-18 drh: Sorry, having to type the long "fossil commit" every time is too long f7a410eca9 2008-10-18 drh: for us Unix hackers ;-) f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Additionally, Fossil seems to use GnuPG when installed and --nosign is f7a410eca9 2008-10-18 drh: not specified. Hmm... two questions arise here for me: 1. should the f7a410eca9 2008-10-18 drh: use of a cryptographically strong signature really be just _optional_ f7a410eca9 2008-10-18 drh: (Monotone for instance RSA signs every commit) and 2. is GnuPG here f7a410eca9 2008-10-18 drh: really the right tool (Monotone does a plain RSA signing and is even f7a410eca9 2008-10-18 drh: able to leverage a running SSH agent for the operation -- something f7a410eca9 2008-10-18 drh: which is very cool both under Unix with "ssh-agent" and under Windows f7a410eca9 2008-10-18 drh: with "pagent"). OTOH, GnuPG 2.x supports a gpg-agent, so this might be f7a410eca9 2008-10-18 drh: no longer a big issue. But Fossil should document this a little bit f7a410eca9 2008-10-18 drh: futher: how to create the necessary GnuPG key, how to setup gpg-agent, f7a410eca9 2008-10-18 drh: etc. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "fossil diff" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: There is "Usage: fossil diff|gdiff ?-i? ?-r REVISION? FILE...". Two f7a410eca9 2008-10-18 drh: questions arise: Why do I have to specify a "FILE"? I would expect f7a410eca9 2008-10-18 drh: that a simple "fossil diff" recursively shows a "diff" of all changed f7a410eca9 2008-10-18 drh: files in the source tree. Additionally, how does one do a diff between f7a410eca9 2008-10-18 drh: two particular revisions (one seems to be not able to specifiy "-r" f7a410eca9 2008-10-18 drh: twice). f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "manifest" / "manifest.uuid" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Above I was already bothered by the _FOSSIL_ file, but now that I f7a410eca9 2008-10-18 drh: played with Fossil I see that "manifest" and "manifest.uuid" files f7a410eca9 2008-10-18 drh: showed up in my source tree. Why is this not implicitly in the f7a410eca9 2008-10-18 drh: database and instead externally represented in the source tree. f7a410eca9 2008-10-18 drh: Hmmm... then I recommend that you use a .fossil *DIRECTORY*, place f7a410eca9 2008-10-18 drh: the control file into .fossil/control (or whatever) and the manifest f7a410eca9 2008-10-18 drh: stuff into .fossil/manifest and .fossil/manifest.uuid. But please do f7a410eca9 2008-10-18 drh: not clutter the top-level of the source three with control data of the f7a410eca9 2008-10-18 drh: DVCS. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "fossil mv" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: There is "fossil add" and "fossil rm", but no "fossil mv". Hopefully f7a410eca9 2008-10-18 drh: this doesn't mean a file move is an "add" and a "remove" bundle, as f7a410eca9 2008-10-18 drh: this way Fossil would have trouble to know that the file was renamed f7a410eca9 2008-10-18 drh: and hence the full history tracking of a file seems to be broken. f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: o "fossil changes" vs. "fossil status" f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Finally, I got confused by the "fossil changes" and "fossil status" f7a410eca9 2008-10-18 drh: commands. "fossil status" seems to be a super-set of "fossil changes". f7a410eca9 2008-10-18 drh: Looks a little bit less orthogonal than necessary. I would remove f7a410eca9 2008-10-18 drh: "fossil changes" or at least do not show the file details on "fossil f7a410eca9 2008-10-18 drh: status". f7a410eca9 2008-10-18 drh: f7a410eca9 2008-10-18 drh: Yours, f7a410eca9 2008-10-18 drh: Ralf S. Engelschall f7a410eca9 2008-10-18 drh: