It seems to me that all these patches floating around everywhere are getting confusing. It's great that people are putting so much effort into improving Arc, but it would be nice if there were a somewhat more orderly way to do it.
Thus, I've put a couple patches into a git repo and published it at git://nex-3.com/arc.git. You can browse it online at http://git.nex-3.com/?p=arc.git;a=summary.
The idea isn't to have a single standard repository, of course. It's to take advantage of the purpose of distributed revision-control systems - to provide a standard way of publishing and exchanging patches. So have at it! All you need to do is
Excellent, could we get some sort of separate forum to talk about this project though to discuss bugs, recent patches, etc.. I noticed you have a module system up now, but I can't get it to work:
arc> (impas blah spec)
#3(tagged mac #<procedure>)
arc> (blah:do2 nil nil nil)
Error: "reference to undefined identifier: _blah"
And I'm not sure why it doesn't work, but I also have an Idea for a more general impas function:
The import.arc stuff is a sketch. One of it's many shortcomings is that if you define a function blah and then use it from inside the same module/file, it won't be able to find blah, because it's been silently renamed |modulename blah| .
The problem you're having seems to be different, though.
After looking, I realize that my testing process was masking a bug where I didn't change some symbol dereference. It's fixed now on my machine, but I'm new to git, and not sure what I need to do to make it show up in the repository. I did git push, but that doesn't seem to have made it appear in the commit list.
EDIT: okay, nex3 helpfully explained things to me, so this fix is in the arc-wiki repo now. It still doesn't change use points, though, as mentioned above.
Replying to myself because it seems as good a place as any...
We could walk the tree of a module and patch up any symbols we find that were referenced in a def or mac, but that's not a clean solution, since it can't find all actual calls (something could be building up names, for example, which we'd never find by walking the tree).
What this means is that any module system built right now, as far as I can tell, will have to require support from those writing the modules, but since renaming modules is implicit in how import.arc works at the moment, there's no way to know what the call should look like, for the module programmer. I can't see any way around this except to change Arc itself to make function and macro definitions respect lexical boundaries, rather than all being bound at the top level. Until that change is made, all we can do is fake a module system.
"... The idea isn't to have a single standard repository, of course. It's to take advantage of the purpose of distributed revision-control systems - to provide a standard way of publishing and exchanging patches. ..."
Hey nex3 that is such a neat solution, using git is smart.
They are separate repos, but I have a git-svn mirror on my local machine from which I've been periodically pulling in any changes to the Subversion wiki and push them to the git wiki. Anyone else is, of course, welcome to do the same.
Cool, so patches flow one way and could in principle flow both ways.
Hold on though, will this scale, or will the cost of merging patches from svn become prohibitive? People would in principle be pushing on both the git and svn sides.
Patches are currently flowing both ways as people commit to both repositories.
Git has excellent merging tools, including a way to step through the history of both the Subversion and Git sides, applying patches automatically when possible and asking the user for manual assistance when there's an ambiguity. Even if the repositories get horribly out-of-sync, which I'll try to make sure they won't, it'll only take a moderate amount of effort to get them back to a stable state.
I put a note in the subversion repository to this effect --- unless there are any complaints, I'm going to take the code out of the SVN repository and leave only a note. There's no point in spending any time merging back and forth.
For now, anyone who is interested in Arc is smart enough to figure out git.
Okay, can someone point me at a good tutorial that talks about how we're supposed to commit with git push?
No matter what I do, I can't seem to clear the warnings given by git status:
I've tried the helpfully suggested lines it mentions:
git reset HEAD import.arc
git reset HEAD lib/import.arc
git rm import.arc
git add lib/import.arc
and git push at various times, and I can't seem to get it to stop warning me about things I need to do, and no matter how many times I git push, nothing seems to change on the web summary. Is there some equivalent of the basic 'svn commit -m "comment" ' that does the trick?
Git makes a distinction between your local repository and remote repositories. You have to commit your change to your local repo before you can push it to the remote one. So first you "git commit," then you "git push."
The total workflow goes something like this:
git clone git://nex-3.com/arc-wiki.git
emacs lib/import.arc # Make your edits
git add lib/import.arc # Schedule lib/import.arc for committing
git commit # Commit lib/import.arc to your local repo
git push # Push your local changes to the remote repo
The "git add" step is due to a little idiosyncrasy of Git where "commit" doesn't commit any changes you don't explicitly tell it to via "git add." You can also do "git commit -a" to automatically add all changes before you commit.
Also, "git commit" takes the same -m parameter that "svn commit" does.
Thank you! I was just starting to see if I could fix date on my Linux system when I thought, "hmm... I should go see if someone has fixed this already..." and there it was in your git repository! A fix by Nathan Weizenbaum! Yay!