armmbed / mbed-cli Goto Github PK
View Code? Open in Web Editor NEWArm Mbed Command Line Interface
Home Page: https://os.mbed.com
License: Apache License 2.0
Arm Mbed Command Line Interface
Home Page: https://os.mbed.com
License: Apache License 2.0
The current situation, for instance for export or compile, and I assume the rest is the same:
python neo.py export --help
usage: neo.py export [-h]
optional arguments:
-h, --help show this help message and exit
To reproduce:
//create main.cpp, the compile compiles all files, and produces binary
python C:\Code\git_repo\github\neo\neo.py compile -m K64F -t GCC_ARM
// edit main.cpp, and run compile again
python C:\Code\git_repo\github\neo\neo.py compile -m K64F -t GCC_ARM
[neo.py] Exec python mbed-os/tools/make.py --source=C:\4 --build=C:\4\.build -m K64F -t GCC_ARM
Building project 4 (K64F, GCC_ARM)
Image: C:\4\.build\4.bin`
// executable or binary are the same as prior editing sources
It seems a user needs to build all
to force neo to recompile everything
# the folder is empty, only one main.cpp and mbed-os.lib
git_repo\github\mbed-rtos-thread-helloworld-test
python neo.py update
[neo.py] Working path "C:\Code\git_repo\github\mbed-rtos-thread-helloworld-test" (directory)
[neo.py] Synchronizing dependency references...
[neo.py ERROR] Cannot find the program or library in the current path "C:\Code\git_repo\github\mbed-rtos-thread-helloworld-test".
[neo.py ERROR] Please change your working directory to a different location or use command "new" to create a new program.
---
neo publish should not assume it is ok to try and push every ref I happen to have in might private working repo.
Neo version 26c8157
I did a neo.py import https://github.com/ARMmbed/example-uvisor-mbed-ipc.git
to obtain my project tree to a new, fresh location. In that repository, there is a file named mbed-os.lib
with the contents of https://github.com/meriac/mbed-os/#9e9c119
. Contrary to my expectations, after the import, neo.py ls
showed mbed-os (1fab13e)
. I expect it to be mbed-os (9e9c119)
, which is exactly what my project specified it wanted. However, it looks like it was updated behind my back to a newer version of mbed-os. Neo should not go behind my back.
Workaround: Create a new repo with the exact version I want as the master branch. Update my mbed-os.lib to point to this new branch. Annoyingly, this workaround must be also applied to each dependency, so it isn't really a practical workaround.
3b934fa added new commands without updating README.md. This is extremely confusing to people trying to use the tool.
There might be other commits that have the same issue.
neo update --clean not only removes local changes (which might be considered reasonable) but also issues a git reset --hard to blow away the users committed history. Thats not acceptable.
Why is neo strongly tied to source control management?
Having to specify hg or git up front (or any SCM) when creating a new project is mixing concerns and forces source control decisions onto users.
With the current coupling how would a user:
For compile sub command neo requires a module to have mbed-os inside it.
It fails to build mbed-os on its own as it does not have itself in it.
C:\Users\azikha01\Documents\GitHub\morpheus>python neo.py import https://github.com/ARMmbed/mbed-os
C:\Users\azikha01\Documents\GitHub\morpheus>cd mbed-os
C:\Users\azikha01\Documents\GitHub\morpheus\mbed-os>python ..\neo.py compile -m K64F -t GCC_ARM
[neo.py] Working path "C:\Users\azikha01\Documents\GitHub\morpheus\mbed-os" (program)
[neo.py ERROR] The mbed-os codebase and tools were not found in this program.
---
C:\Users\azikha01\Documents\GitHub\morpheus\mbed-os>
Each of the other neo subcommands that deal with git remotes provide the --protocol option, new does not, assuming instead https
In a clean environment there are many dependencies needed for tools
. If neo is the entry to tools it should ensure all deps are installed as per the requirements for the version of tools. Initially this is just something like pip install -U -r requirements.txt
but forward looking should install in a venv at the program level or system level depending on how tools are distributed.
It seems like I am hitting windows path limit. This was a problem with yotta, which I recall added unicode paths support, to overcome this?
cd C:\Code\git_repo\github\mbed-rtos-thread-helloworld
python C:\Code\git_repo\github\neo\neo.py compile -m K64F -t GCC_ARM
[neo.py] Exec python mbed-os/tools/make.py --source=C:\Code\git_repo\github\mbed-rtos-thread-helloworld --build=C:\Code\git_repo\github\mbed-rtos-thread-helloworld\.build -m K64F -t GCC_ARM
Building project MBED-RTOS-THREAD-HELLOWORLD (K64F, GCC_ARM)
[ERROR] [Error 87] The parameter is incorrect
vs
cd C:\2
python C:\Code\git_repo\github\neo\neo.py compile -m K64F -t GCC_ARM
[neo.py] Exec python mbed-os/tools/make.py --source=C:\2 --build=C:\2\.build -m K64F -t GCC_ARM
Building project 2 (K64F, GCC_ARM)
Compile: Mutex.cpp
Compile: RtosTimer.cpp
Compile: Semaphore.cpp
Compile: Thread.cpp
I got an error from neo.py update
with latest meriac/mbed-os.
[neo.py] Pulling from remote repository
[neo.py] Exec hg pull
pulling from http://mbed.org/users/mbed_official/code/mbed-rtos
real URL is https://developer.mbed.org/users/mbed_official/code/mbed-rtos/
searching for changes
no changes found
[neo.py] Exec hg update -r 0d833691fc17
abort: unknown revision '0d833691fc17'!
mbed-os/core/mbed-rtos.lib has the contents: https://developer.mbed.org/teams/Morpheus/code/mbed-rtos-update/#0d833691fc17
However, the last time I ran neo.py update
, the contents were http://mbed.org/users/mbed_official/code/mbed-rtos/#bdd541595fc5
.
What neo.py
appears to be doing is an hg update
to the new revision "0d833691fc17", but with the old URL "http://mbed.org/users/mbed_official/code/mbed-rtos". This doesn't work. Neo should not do this.
Workaround: Delete the mbed-os
folder in your application before running neo.py update
. This is slow.
@screamerbg neo.py sync
deletes libs/directories from git.
Milosch:mbed-os meri$ neo.py sync
---
[neo.py] Syncing library references...
---
[neo.py] Removing /Users/meri/mbed/mbed-os/hal.lib
[neo.py] Exec git rm -f /Users/meri/mbed/mbed-os/hal.lib
rm 'hal.lib'
---
[neo.py] Removing /Users/meri/mbed/mbed-os/net.lib
[neo.py] Exec git rm -f /Users/meri/mbed/mbed-os/net.lib
rm 'net.lib'
---
[neo.py] Removing /Users/meri/mbed/mbed-os/tools.lib
[neo.py] Exec git rm -f /Users/meri/mbed/mbed-os/tools.lib
rm 'tools.lib'
---
[neo.py] Removing /Users/meri/mbed/mbed-os/core/mbed-rtos.lib
[neo.py] Exec git rm -f /Users/meri/mbed/mbed-os/core/mbed-rtos.lib
rm 'core/mbed-rtos.lib'
---
[neo.py] Removing /Users/meri/mbed/mbed-os/core/mbedtls.lib
[neo.py] Exec git rm -f /Users/meri/mbed/mbed-os/core/mbedtls.lib
rm 'core/mbedtls.lib'
Milosch:mbed-os meri$
@screamerbg Neo does not allow to add .lib files in sub-repositories - as it claims that it's not a repository.
@screamerbg In case the compilation fails, neo does not return an erro code (success instead) - which breaks usage of neo in scripts.
If a library depends on itself, neo goes into an infinite cloning loop.
neo head set to 36f8a26
neo.py export --ide gcc_arm -m K64F
[neo.py] Working path "C:\5" (program)
[neo.py] "python mbed-os/tools/project.py -D TARGET_LIKE_MBED -D TARGET_LIKE_CORTEX_M4 -m K64F --source=C:\5"
C:\5
Successful exports:
* K64F::uvision C:\build\export\5_uvision_K64F.zip
it used to work for gcc_arm. Am I missing something? seems like even verbose is not active (I recall -v was showing me commands which are running), but that's for another issue.
@screamerbg Please add a TARGET_DEFAULT rule:
We need that behaviour in neo to add uVisor-fallback functions to all unsupported targets.
Please unhide the .build
folder, then I can actually find the binary to drag'n'drop onto the CMSIS-DAP again.
In general, .folder
are usually hidden in all non-Windows systems.
Or, even better: Provide a neo.py program
function (or something like that), that does the finding of the binary and the copying for me.
So many errors reported when linted with pylint. Console dump below. Please have a look.
$ pylint neo.py -E
E:203, 4: Method should have "self" as first argument (no-self-argument)
E:206, 4: Method should have "self" as first argument (no-self-argument)
E:210, 4: Method should have "self" as first argument (no-self-argument)
E:214, 4: Method should have "self" as first argument (no-self-argument)
E:221, 4: Method should have "self" as first argument (no-self-argument)
E:232, 4: Method has no argument (no-method-argument)
E:235, 4: Method should have "self" as first argument (no-self-argument)
E:236,80: Instance of 'Hg' has no 'url' member (no-member)
E:239, 4: Method should have "self" as first argument (no-self-argument)
E:240,69: Instance of 'Hg' has no 'url' member (no-member)
E:243, 4: Method should have "self" as first argument (no-self-argument)
E:244,69: Instance of 'Hg' has no 'url' member (no-member)
E:249, 4: Method has no argument (no-method-argument)
E:252, 4: Method has no argument (no-method-argument)
E:255, 4: Method has no argument (no-method-argument)
E:259, 4: Method has no argument (no-method-argument)
E:268, 4: Method has no argument (no-method-argument)
E:271, 4: Method should have "self" as first argument (no-self-argument)
E:275,31: Instance of 'Hg' has no 'path' member (no-member)
E:289, 4: Method should have "self" as first argument (no-self-argument)
E:290,31: Instance of 'Hg' has no 'path' member (no-member)
E:293, 4: Method should have "self" as first argument (no-self-argument)
E:295,31: Instance of 'Hg' has no 'path' member (no-member)
E:301,31: Instance of 'Hg' has no 'path' member (no-member)
E:305, 4: Method should have "self" as first argument (no-self-argument)
E:307,31: Instance of 'Hg' has no 'path' member (no-member)
E:313,31: Instance of 'Hg' has no 'path' member (no-member)
E:324, 4: Method should have "self" as first argument (no-self-argument)
E:325,31: Instance of 'Hg' has no 'path' member (no-member)
E:335, 8: Instance of 'str' has no 'remove' member (no-member)
E:347, 4: Method should have "self" as first argument (no-self-argument)
E:350, 4: Method should have "self" as first argument (no-self-argument)
E:354, 4: Method should have "self" as first argument (no-self-argument)
E:361, 4: Method should have "self" as first argument (no-self-argument)
E:368, 4: Method should have "self" as first argument (no-self-argument)
E:379, 4: Method has no argument (no-method-argument)
E:382, 4: Method should have "self" as first argument (no-self-argument)
E:383,80: Instance of 'Git' has no 'url' member (no-member)
E:386, 4: Method should have "self" as first argument (no-self-argument)
E:387,69: Instance of 'Git' has no 'url' member (no-member)
E:390, 4: Method should have "self" as first argument (no-self-argument)
E:395,74: Instance of 'Git' has no 'url' member (no-member)
E:400,128: Instance of 'Git' has no 'url' member (no-member)
E:403, 4: Method has no argument (no-method-argument)
E:406, 4: Method has no argument (no-method-argument)
E:409, 4: Method has no argument (no-method-argument)
E:412, 4: Method has no argument (no-method-argument)
E:420, 4: Method has no argument (no-method-argument)
E:424, 4: Method should have "self" as first argument (no-self-argument)
E:435, 4: Method should have "self" as first argument (no-self-argument)
E:438, 4: Method should have "self" as first argument (no-self-argument)
E:439,31: Instance of 'Git' has no 'path' member (no-member)
E:442, 4: Method should have "self" as first argument (no-self-argument)
E:443,31: Instance of 'Git' has no 'path' member (no-member)
E:454, 4: Method should have "self" as first argument (no-self-argument)
E:455,31: Instance of 'Git' has no 'path' member (no-member)
E:465, 8: Instance of 'str' has no 'remove' member (no-member)
The module mbed-core
does not contain any source control directory when it's fetched.
Running the command:
> neo new hg
Errors with the following:
[neo] Working path "/home/ubuntu/workspace/New Folder" (program)
[neo] Initializing repository
[neo] "hg init /home/ubuntu/workspace/New Folder"
[neo] Synchronizing dependency references...
Traceback (most recent call last):
File "/usr/local/bin/neo", line 1152, in <module>
status = args.command(args)
File "/usr/local/bin/neo", line 722, in thunk
return command(**argv)
File "/usr/local/bin/neo", line 751, in new
sync()
File "/usr/local/bin/neo", line 966, in sync
repo = Repo.fromrepo()
File "/usr/local/bin/neo", line 512, in fromrepo
repo.sync()
File "/usr/local/bin/neo", line 600, in sync
self.url = self.geturl()
File "/usr/local/bin/neo", line 631, in geturl
return self.scm.geturl(self).strip().replace('\\', '/')
File "/usr/local/bin/neo", line 275, in geturl
with open(os.path.join(repo.path, '.hg/hgrc')) as f:
IOError: [Errno 2] No such file or directory: '/home/ubuntu/workspace/.hg/hgrc'
Neo requires a valid repo (git init or hg init prior working with it). This is not described in the Readme, thus the example provided in Readme fails:
To reproduce:
mkdir test
cd .test
echo "https://developer.mbed.org/teams/Morpheus/code/mbed-os/#71a471196d89" > mbed-os.lib
python neo.py deploy
---
[neo.py ERROR] Current folder is not a supported repository
---
@screamerbg neo.py update
does not update nested repositories (at least for git).
Cloning a repo currently means using https, which might be convenient for most of the users and for public repositories.
Is there planned way to get it to use ssh? At least for a private repository it could use ssh. This was similar to yotta (taken from docs):
"dependencies": {
"usefulmodule": "git+ssh://[email protected]:path/to/repo"
}
I fetched manually a program (not used neo import) to get the following:
C:\5
λ ls
MACROS.txt main.cpp mbed-os.lib security.h
Run update to get:
C:\5
λ python neo.py update
[neo.py] Working path "C:\5" (program)
[neo.py] Synchronizing dependency references...
[neo.py] Remove reference "mbed-os" -> "https://github.com/ARMmbed/mbed-os.git/#5828ebd"
[neo.py] Removing C:\5\mbed-os.lib
[neo.py] "hg rm -f C:\5\mbed-os.lib"
[neo.py] Pulling remote repository "https://[email protected]/teams/Morpheus/code/mbed-Client-Morpheus-from-source/" to local "5"
[neo.py] "hg pull"
pulling from https://[email protected]/teams/Morpheus/code/mbed-Client-Morpheus-from-source/
searching for changes
no changes found
[neo.py] Updating "5" to latest revision in the current branch
[neo.py] "hg update"
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
Results in removing mbed-os.lib, and nothing else:
C:\5
λ ls
MACROS.txt main.cpp security.h
Morpheus is distributed. In following use case
module A needs module B
How do I point to module B in my local sandbox inside module A. So that module A is build with local module B instead of fetching module B from link in module-B.lib.
Much yotta link functionality.
This comes from the mbed SDK world, where we do this nasty inconsistency, which we could fix here (compile and export should provide subset of arguments which are the same, as toolchain or target).
I got at least one example:
# -t vs -i
neo compile -t GCC_ARM
neo export -i gcc_arm
Plus, try to do export -i GCC_ARM
(I know this fails for project.py in our workspace tools) :-))
When we stumbled over the ARMmbed/mbed-os#19 - we ended up on a situation where it's non-trivial to revert the whole tree of a library to the version indicated at the top.
The main problem was that a patch did break the mbed-os build. The problem was introduced by a lib inside mbed-os.lib. Reverting the top level application resulted as expected to revert the top level libs to the version before the bug was introduced.
There was no way though to propagate that revert downwards, so the subsequent repositories would revert to the version mentioned in the .lib files above.
The expected functionality is this:
neo.py propagate
command to propagate the .lib link indicated revisions on the top downwards to all nested repos. In case a repo has uncommited changes, the tool will bail out at the repository in question.neo.py propagate --hard
will propagate the .lib indicated revisions on the top downwards to all nested repos, uncommited changes will be wiped.@bogdanm @mjs-arm @screamerbg @AlessandroA @Patater @niklas-arm
@screamerbg neo.py sync
does not pick up changes inside git repositories in sub-directories - they still point to the an updated revision.
I have a local lib3
repository with a dependency on a lib4
. Initially, lib4.lib
looks like this:
[email protected]:bogdanmarinescu/lib4.git/#c00bd5e039ba164e645672e63c8c41a78fffb7c2
If I run neo update
inside lib3
, lib4.lib
is automatically modified to this:
https://bitbucket.org/bogdanmarinescu/lib4/#c00bd5e039ba164e645672e63c8c41a78fffb7c2
The SHA1 is exactly the same, but the original (ssh based) URL was replaced with a HTTPS URL.
Section https://github.com/ARMmbed/neo#creating-a-new-program has some minor issues with command line and add
option description, see part with commands:
Below is not really a command I think.
$ "neo.py new git" or "neo.py new hg"
With this in mind, these are the steps for creating a new program (we'll call it myprog):
$ mkdir myprog
$ cd myprog
$ "neo.py new git" or "neo.py new hg" # this creates new project in the current folder based on the source control management you specified, and also imports the latest revision of mbed-os dependency to your project tree
<add your source files>
add
above works a lot like clone, except it adds an explicit dependency to the program that already exists on your local machine. You can get a list of all the dependencies of your program by running neo.py ls.
To reproduce
python neo.py compile --hepl
[neo.py] Exec python mbed-os/tools/make.py --source=C:\2 --build=C:\2\.build --hepl
Usage: make.py [options]
make.py: error: no such option: --hepl
Traceback (most recent call last):
File "C:\Code\git_repo\github\neo\neo.py", line 724, in <module>
status = args.command(args)
File "C:\Code\git_repo\github\neo\neo.py", line 113, in thunk
return command(*ordered_args)
File "C:\Code\git_repo\github\neo\neo.py", line 668, in compile
env=env)
File "C:\Code\git_repo\github\neo\neo.py", line 130, in popen
raise ProcessException(proc.returncode)
__main__.ProcessException: 2
I got this when I was trying to use export
python neo.py export -m K64F -i gcc_arm
[neo.py] Exec python mbed-os/tools/project.py --source=C:\2 -m K64F -i gcc_arm
Traceback (most recent call last):
File "mbed-os/tools/project.py", line 148, in <module>
lib_symbols = [] + options.macros
TypeError: can only concatenate list (not "NoneType") to list
Traceback (most recent call last):
File "C:\Code\git_repo\github\neo\neo.py", line 724, in <module>
status = args.command(args)
File "C:\Code\git_repo\github\neo\neo.py", line 113, in thunk
return command(*ordered_args)
File "C:\Code\git_repo\github\neo\neo.py", line 690, in export
env=env)
File "C:\Code\git_repo\github\neo\neo.py", line 130, in popen
raise ProcessException(proc.returncode)
__main__.ProcessException: 1
Tests in the TESTS directory are not compiled.
Issue a 'neo new' then abort (ctrl-c) when it prompts for https authentication information, the partially constructed project directory is left in an inconsistent state. It should probably be blown away if incomplete.
In absence of command line tools a python stacktrace is displayed - it might make sense to wrap the process execution in a handler that detects the absence of a command line tool and prints a user friendly message like "Could not detect the hg command line tool - please install mercurial or ensure hg is in your search path".
milmer01@localhost:~/mbed/uvisor-mbed-helloworld$ ../neo/neo.py deploy
[neo.py] Cloning /home/milmer01/mbed/uvisor-mbed-helloworld/mbed-os from https://github.com/meriac/mbed-os
[neo.py] "git clone https://github.com/meriac/mbed-os /home/milmer01/mbed/uvisor-mbed-helloworld/mbed-os"
fatal: destination path '/home/milmer01/mbed/uvisor-mbed-helloworld/mbed-os' already exists and is not an empty directory.
[neo.py] Cloning /home/milmer01/mbed/uvisor-mbed-helloworld/mbed-os from https://github.com/meriac/mbed-os
[neo.py] "hg clone https://github.com/meriac/mbed-os /home/milmer01/mbed/uvisor-mbed-helloworld/mbed-os -u 14afdac"
Traceback (most recent call last):
File "../neo/neo.py", line 933, in <module>
status = args.command(args)
File "../neo/neo.py", line 120, in thunk
return command(**argv)
File "../neo/neo.py", line 623, in deploy
import_(lib.fullurl, lib.path)
File "../neo/neo.py", line 602, in import_
scm.clone(repo.url, repo.path, repo.hash)
File "../neo/neo.py", line 219, in clone
popen([hg_cmd, 'clone', url, name] + (['-u', hash] if hash else []))
File "../neo/neo.py", line 134, in popen
proc = subprocess.Popen(command, **kwargs)
File "/usr/lib64/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
How to define a library which could point to a branch, plus probably a specific commi?
# something along the lines
[email protected]:0xc0170/repo --branch feature/new_one
A neo user has a reasonable expectation that neo compile -h or perhaps just neo -h should elaborate the supported sub command options.
Can we give some thought to the neo commands to be more inline with similar tools, the current command set uses some odd words.
The decision on script name was 'mbed-cli', but the setup.py script continues to install aliases 'neo' and 'mbed', both of these should be removed.
This causes an issues, if project is exported to 2 various toolchains.
How to reproduce
# dir
/project
# export
neo export -t target -i IDE
# the exported project is in the root , for instance ./Makefile is here
# make will create build directory
make
# export to another toolchain
neo export -t target -i IDE2
# build now the project for different IDE
# this build can fail
A proposal can be that export dir is not root, could be a directory. And for each IDE, there should be separate directory, so they don't build into one folder.
The exported dir could look like:
exported/Makefile/
exported/uvision/
exported/iar/
Claim should be 2016
# testing default export command
neo.py export
[neo.py] Exec python mbed-os/tools/project.py --source=C:\2
Successful exports:
* LPC1768::uvision C:\build\export\2_uvision_LPC1768.zip
The path is wrong, we can see I am using C:/2 path, there's no C:\build\export\2_uvision_LPC1768.zip
, neither any zip file, but directly project files.
I thought it's going to be mbed CLI for the product name and mbed-cli for the package name. Compare to https://github.com/ARMmbed/mbed-client - the product is mbed Client, only the library is mbed-client.
Attempting to use 'neo update' results in the .lib file being updated to reflect what is on disk rather than what is on disk being updated to reflect what is in the .lib, ie neo update can give the behaviour of neo sync. Either I've completely misunderstood the documented behaviour of neo update, or the implementation is broken.
Issue appears to be related to this change:
commit fb5cefd
Author: Mihail Stoyanov [email protected]
Date: Sat Apr 9 19:25:06 2016 +0100
Introduce can_update() routine that checks for local repositories, uncommitted changes or unpublished revisions. Currently used as safe mechanism for update() where a sub-reposi
Also sync before updating so the update process scans all .lib files
Which explicitly introduces a sync operation as a part of an update.
When I make a new branch and haven't pushed yet, and then add a new .lib dependency file that I'd like pulled in, I run neo.py update
to pull in the new dependency, but Neo barfs.
Neo should just skip updating the current branch (when there is no upstream for it) and update the other stuff. I don't want to have to set a remote for the current branch yet.
Workaround: git branch --set-upstream mybranch origin/mybranch
before running neo.py update
---
[neo.py] Pulling from remote repository
[neo.py] Exec git fetch origin
[neo.py] Exec git merge
fatal: No remote for the current branch.
Traceback (most recent call last):
File "/home/user/code/neo/neo.py", line 724, in <module>
status = args.command(args)
File "/home/user/code/neo/neo.py", line 113, in thunk
return command(*ordered_args)
File "/home/user/code/neo/neo.py", line 580, in update
repo.scm.pull(ref)
File "/home/user/code/neo/neo.py", line 328, in pull
popen([git_cmd, 'merge'] + ([hash] if hash else []))
File "/home/user/code/neo/neo.py", line 130, in popen
raise ProcessException(proc.returncode)
__main__.ProcessException: 128
git remote -v
github-patater [email protected]:Patater/uvisor-mbed-helloworld.git (fetch)
github-patater [email protected]:Patater/uvisor-mbed-helloworld.git (push)
Sometimes I don't have any remote named "origin". Neo should not assume I have a remote named "origin".
$ neo.py update
---
[neo.py] Pulling from remote repository
[neo.py] "git fetch origin"
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
---
[neo.py ERROR] Process failed! Error code 128
---
A number of folks are now getting blocked by the compile command line reaching a hard limit due to large trees creating large numbers of -I PATH
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.