Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
Git or Gist workflow for Pythonista
-
Right. I'm a little upset about the $10 IAP for working copy push functionality, I'd be happy to pay maybe up to 5, but 10 is excessive.
-
i am not sure what a ui shell would look like :) Windows perhaps.
gitview was supposed to be the ui version of a git client. It works, if you are careful in your workflow. Because there is no merge, it is necessary before changing files locally, to pull, then change/commit locally, then push. Don't ever commit directly in github, such as updating readme, without then pulling back to your device. The ui is also probably fairly nonintuitive. I use this in combo with stash -- stash is used for anything complex, gitview is used for selecting which files to commit, and actually committing, and also the diff viewer is slightly more convienent.
I aim to improve the lack of fetch/merge with the next version of gitview, along with a vastly improved ui - a cleaner button bar menu, sliding subframes for branch or remote management, and integrated help).
-
@JonB , sorry I didn't explain the UI part correctly. But imagine you could create an object, mystash = stash.FacelessApp() from inside Pytonista. So you might have a mystash.exec() method, and the results being returned rather than going to std.io or console or whatever. That would enable others to write a UI using Pythonista around the cmd line interface of stash. I know I have given a very simplified English version here. In theory I have no idea how hard it would be to turn stash into a callable object , but it sounds interesting to me.
But look for me, I have have limited exp. with cmd line interfaces, especially in recent years. I am sure those who are comfortable with them are thinking what the hell is he going on about. But when you are not used to using cmd line , it sucks the life out of you. But that's just me.
But from what I see here, the least understood subjects are about backing up code, and gusts and repo's.
If I am not mistaken, people are scared to make something too powerful or comprehensive because of the possible ramifications.
Let's say it was not so political or sensitive, why would someone not just publish a simple guide to the life cycle as a keynote presentation for example.
Again, I am not blaming anyone. And maybe if I go back to stash I will understand it better now. But really, this would make my year, if I could easily work with a repo in a collaboration way with guys here.
-
just chiming in with my particular source control workflow if anybody's curious I think it might be pretty unique.
1.) Dropbox sync for all scripts within Pythonista. I have the sync script linked to a launch center action so I can quickly run it from my home screen before/after any editing has taken place anywhere. (have to be meticulous and careful here)
2.) Individual project in it's own subfolder within dropbox folder, symlinked to from an xCode project on my Mac.
3.) xCode's source control from within xCode
-
@Tizzy , thanks for the info. Had some Dropbox syncing working before. After going to 1.6, I didn't reinstate it. I also didn't do a good job of automating it. I think I could do a better job now. At least I hope so.
I haven't tried an Xcode project yet. Scares the crap out of me. Will have to try it sometime.
If I am working on something and want a snapshot because I am about to refactor the code (which I have to do all the time, because I am hopeless 😱) I just use the 'share as gist'
I accept that there are ways to do,all this. But it's just not as simple as it should be. And as you point out, sometimes you have to be very diligent and careful.
I don't understand all the potential problems with storing scripts and or full projects in SQLite databases. It does not solve any problems relating to repo's etc. It could still be a interesting way to back up named/dated versions to a single file, so you only need to back up your sqlite db file. If I ever finish my resource manager, I will give it a go.
But again thanks for your comments, spurred some new thoughts for me -
@JonB , oh sorry one more thing I neglected to be clear about. I didn't mean that the whole of stash to been turned into a GUI. Just saying if it was also a callable object that certain cmds could be wrapped up in a UI being powered by stash. I know it's a powerful tool. I would have thought even my powerful if could be called from inside a app.
Anyway, I hope I haven't been offensive, was not my meaning. I am just frustrated about not being able to do it easily and properly (repo's that is). I also accept, that my lack of skill is also a big contributor to that.
-
stash actually does include a callable object where other python scripts can run commands. So it is possible to write programs that include ui components, although there is sort of a console paradigm that tool authors have tried to honor.
In re-installing stash, I have found that it does not seem to properly install gittle anymore in the beta, I suspect because of the changes to the sys.path. So, that needs to be fixed before git is really viable in stash.
-
@JonB , ok. When it's resolved I will try again. This time I will give it my all. I really want to get it working in a way I understand it.
Thanks💋 -
Just read this thread. @Phuket2 stash object is callable since v0.3. So you can do something like
from stash import stash; _stash = stash.StaSh(); _stash('Your_Command')
. If a script is invoked from within stash, it can access the callable object without import, i.e. just do_stash('some_command')
. -
@ywangd , thanks. I was just trying it inside a script. Is it possible for the _stash(cmd) to do its normal output to the Pythonista console also?
-
@Phuket2 Yes you can send output to the builtin console with
_stash('some_command > &3')
. The>
character is a redirect operator in shell and&3
is the pointer to builtin console. Please note you need v0.6 for this to work. If you are on earlier version, please runselfupdate
first and restart Pythonista. -
@ywangd , thanks. I did the selfupdate. I was 0.53
But if I do the following is it valid? I get stopped....
Just trying to understand how I can use itimport os import shutil _git_dir = '.git' _url = 'https://github.com/Phuket2/Pythonista' _cmd_git_clone = 'git clone {} > &3' _cmd_cd = 'cd {}' from stash import stash _stash = stash.StaSh() _stash(_cmd_cd.format(os.curdir)) if os.path.exists(_git_dir): print 'we have a git dir already' shutil.rmtree(_git_dir) cmd = _cmd_git_clone.format(_url) print cmd print _stash(cmd)
-
@Phuket2 The "Stopped ..." message is normal. The callable stash object returns a worker thread that runs the given command. The callable interface make sure it returns after the thread finish its job. So the "Stopped" message simply says the command is executed and now the thread has done its job and stopped.
A few things to note for your script:
- The GitHub repo address must have an ending
.git
, i.e.https://github.com/Phuket2/Pythonista.git
. git clone ...
command generates no output. So this may not be the best command to showcase> &3
.- Your script must run inside the same folder where the repo is to be cloned, i.e. where the
.git
folder resides. Becauseos.curdir
is always a dot, (.
) andcd .
does nothing. If you wanna clone into a sub-directory to where your script locates. You can first_stash('mkdir sub_folder')
to create the folder and then_stash('cd sub_folder')
.
- The GitHub repo address must have an ending
-
@ywangd, thanks. It's very nice. I need to know more but will not bother you now.
But also, I don't feel so stupid now to ask if it's possible to do.Yes the below is simple. But a nice ui powered by stash is super cool.
# coding: utf-8 import os import shutil import editor ''' ONLY TESTING...DESTRUCTIVE ''' this_path , fn = os.path.split(editor.get_path()) _git_dir = '.git' _url = 'https://github.com/Phuket2/Pythonista.git' _cmd_git_clone = 'git clone {} > &3' _cmd_cd = 'cd {} > &3' _clone_dir_name = 'git_clone' _cmd_mkdir = 'mkdir {}' from stash import stash _stash = stash.StaSh() _stash(_cmd_cd.format(this_path)) _stash(_cmd_mkdir.format(_clone_dir_name)) _stash(_cmd_cd.format(_clone_dir_name)) if os.path.exists(_git_dir): print 'we have a git dir already' shutil.rmtree(_git_dir) cmd = _cmd_git_clone.format(_url) print _stash(cmd)
-
-
I finally created the script which delivers the workflow that I have been looking for...
A simple appex script that enables the use of the share sheet to transfer a repo, file, or directory from the Working Copy app into Pythonista.
https://github.com/cclauss/Pythonista-and-Working-Copy
The new Working Copy release also features iOS Handoff support to keep the code on all of your iOS devices in sync. StaSH and Gitista are super cool but they can (yet!) deliver Handoff like Working Copy can!
Issues and pull requests are most welcome!
-
@ccc , thanks a lot. Works flawlessly for me.
-
@ccc It looks nice. Just checking to see that I've understood this... It is a way to check out the files from a git repo into Pythonista. And Working Copy itself can keep the files in sync between iOS devices. But getting changes of the files out of Pythonista is not covered by this solution. Do you copy-paste the changes into Working Copy manually?
How do you use it yourself?
-
So far all that I have is
read_from_working_copy.py
which is one-way: Working Copy --> PythonistaYes, Working Copy could use Handoff to keep its repos on multiple iOS devices in sync with each other
I have not yet figured out how to deliverI am open to ideas and Pull Requests.write_to_working_copy.py
to go the other way: Pythonista --> Working Copy.https://github.com/omz/Pythonista-Issues/issues/98 Would help to close this loop.
-
@Oscar I figured out the "save to Working Copy" piece too... It is actually builtin! At least on a single file basis (e.g. not a whole folder all at once).
- Open the file of interest in the Pythonista editor
- Click the wrench icon at the upper right
- Click the "Share..." button
- Click "Save in Working Copy" button
- Select the repo that you want to save the file into
- Click "Save As..."
- Change the filename if you want to and click "Save As..." again
- Click "Just Save" if you want to bundle multiple files into a single commit --or-- Type your commit message and click "Commit"
Now we have an end to end workflow: GitHub --> Working Copy --> Pythonista --> Working Copy --> GitHub