e04f17fe5f
I tested this by creating a dummy implementation of an `HgRepositoryProvider` (with the optional `createRepositorySync()` method implemented) and an `HgRepository` in an Atom package with the following stanza in the `package.json`: ``` "providedServices": { "atom.repository-provider": { "versions": { "0.1.0": "createHgRepositoryProvider" } } }, ``` I opened a path with an Hg repository from the command line using Atom. I verified that `atom.project.repositoryProviders` contains both a `GitRepositoryProvider` and an `HgRepositoryProvider`. I also verified that running the following printed out an `HgRepository`: ``` var Directory = require('pathwatcher').Directory; atom.project.repositoryForDirectory( new Directory(atom.project.getPath(), /* symlink */ false)).then( function(repo) { console.log('repo: %o', repo); }); ``` One thing that stands out to me about the current API for the atom.repository-provider service is that the function used to create a `RepositoryProvider` does not receive any arguments. If the creation of the `GitRepositoryProvider` were done via the service, this would be a problem because it needs a reference to `atom.project`, which is not defined when it is created. (We work around this because it is created in `Project`'s constructor, so it can pass `this` to `new GitRepositoryProvider()`.) We would have to create a `RepositoryProviderFactory` or something if we wanted to specify arguments when creating a `RepositoryProvider`, in general. Maybe that's too crazy / not an issue, in practice. Though note that `GitRepository` cannot access `atom.project` lazily because it uses it in its constructor to do the following: ``` if @project? @subscriptions.add @project.eachBuffer (buffer) => @subscribeToBuffer(buffer) ``` So long as we can guarantee that `atom.project` is defined before the other providers are initialized, I think we should be OK. Follow-up work: * Replace the use of `RepositoryProvider.createRepositorySync()` with `RepositoryProvider.repositoryForDirectory()` in `Project.setPaths()`. * Replace all uses of `Project.getRepositories()` with `Project.repositoryForDirectory()` in packages that are bundled with Atom by default. * Implement `Directory.exists()` and/or `Directory.existsSync()` and update `git-repositor-provider.coffee`, as appropriate. * Eliminate `GitRepositoryProvider.repositoryForDirectory()`'s use of synchronous methods. * Somewhat orthogonal to this diff, but the following fields need to be removed from `Project` because they enforce the idea of a single root: `path`, `rootDirectory`, and `repo`. This has implications around the existing use of `@rootDirectory?.off()` and `@destroyRepo()`. |
||
---|---|---|
apm | ||
benchmark | ||
build | ||
docs | ||
dot-atom | ||
exports | ||
keymaps | ||
menus | ||
resources | ||
script | ||
spec | ||
src | ||
static | ||
vendor | ||
.gitattributes | ||
.gitignore | ||
.node-version | ||
.npmrc | ||
.pairs | ||
.python-version | ||
atom.sh | ||
coffeelint.json | ||
CONTRIBUTING.md | ||
Dockerfile | ||
LICENSE.md | ||
package.json | ||
README.md |
Atom is a hackable text editor for the 21st century, built on atom-shell, and based on everything we love about our favorite editors. We designed it to be deeply customizable, but still approachable using the default configuration.
Visit atom.io to learn more or visit the Atom forum.
Visit issue #3684 to learn more about the Atom 1.0 roadmap.
Installing
OS X
Download the latest Atom release.
Atom will automatically update when a new release is available.
Windows
Download the latest AtomSetup.exe installer.
Atom will automatically update when a new release is available.
You can also download an atom-windows.zip
file from the releases page.
The .zip
version will not automatically update.
Using chocolatey? Run cinst Atom
to install
the latest version of Atom.
Debian Linux (Ubuntu)
Currently only a 64-bit version is available.
- Download
atom-amd64.deb
from the Atom releases page. - Run
sudo dpkg --install atom-amd64.deb
on the downloaded package. - Launch Atom using the installed
atom
command.
The Linux version does not currently automatically update so you will need to repeat these steps to upgrade to future releases.
Red Hat Linux (Fedora, CentOS, Red Hat)
Currently only a 64-bit version is available.
- Download
atom.x86_64.rpm
from the Atom releases page. - Run
sudo yum localinstall atom.x86_64.rpm
on the downloaded package. - Launch Atom using the installed
atom
command.
The Linux version does not currently automatically update so you will need to repeat these steps to upgrade to future releases.
Building
Developing
Check out the guides and the API reference.