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
-
@JonB I just tried gistcheck and it appears not to work, perhaps because of the beta.
-
@ccc, I can not believe your comments here. I keep th9nking someone has some magic sauce I don't have. It's so frustrating because I know often is not all said here to make sure something stupid does not happen with you know who.
Ccc you have asked me many times to share a project as a repo vrs a gist. Easy enough done, but it's the lifecycle where it all comes apart. I would love to close off my project now and share as a repo for collaboration, but how to update from Pythonista (I mean a button press, not copy and pasting all my files), then also downloading the latest branches or whatever you call them to Pythonista, then also to be able to go back to any branch in the project and restore that to Pythonista. To me this seems like it just should be all reasonable. But the rules or whatever seem to not publicly allow that.
Ccc, I am not having a go at you. I am just venting my frustration. Somehow we are missing out on one of the most important things about python, collaboration! Drives me crazy
@jonb , maybe stash is the way to go. I am sure I have tried with stash. Not saying it does not work, it I don't think it's for dummies like me.
Jonb is it possible to run UI with stash? Just a thought to help simplify the cmd line interface. Eg, can you make a stash object, and call the cmd line from the object. For a powerful cmd line editor like stash, to have it operate as an object or faceless app, whatever the right word is could offer a lot of possibilities to simply chained cmd line directives. Look maybe I don't know what I am talking about. But I just know I wish I could do it easy and in predictable and reliable way, with the knowledge I will not lose data. Eg, stash could have an option to enter a Dropbox account or directory or another other account that it makes a back up or your working copy of files before any merge, pull request etc... Is done before any of the git cmds are executed. -
@Phuket2 The way I often put files in a github repo is to modify @omz 's pythonista-backup.py to host a single folder, and then download it on my Mac, and use github-desktop to upload it. This is a pain.
-
@Webmaster4o , yeah. But not only a pain, it's not controlled. Also if you are out and want to to a pull or push or take from a branch or whatever crazy thing you can do with Github, it's all about copy and pasting. Well as least as far as I know. But really copy and pasting into Github repo's must negate the whole concept of managed source code.
Again, I am not blaming anyone. I am just venting because I really find it frustrating. I would love a practical way here to collaborate with all the guys here on code, but one copy paste mistake, goes to hell. Also, maybe I want to update one line in a function, could be important. Then want to push it to the repo with a comment, should be a no brainer. Then if in 5mins later someone further refines my update, I should be just be able to update my local copy with a click.Yeah, I go on and on. I would love to see this solved correctly. I know the people here have the skill to do it, but it's walking the fine line I guess
-
Another way is to make a Kickstarter project to buy Apple π
-
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)
-