6
6
{self} [--path=<path>] [-v...] <target> create [--add]
7
7
{self} [--path=<path>] [-v...] <target> delete [-f]
8
8
{self} [--path=<path>] [-v...] <target> open
9
+ {self} [--path=<path>] [-v...] <target> (list|ls) [-l] <user>
9
10
{self} [--path=<path>] [-v...] <target> fork <user>/<repo> [--branch=<branch>]
10
11
{self} [--path=<path>] [-v...] <target> fork <user>/<repo> <repo> [--branch=<branch>]
11
12
{self} [--path=<path>] [-v...] <target> create <user>/<repo> [--add]
23
24
{self} [--path=<path>] [-v...] <target> request <user>/<repo> create <title> [--branch=<remote>] [--message=<message>]
24
25
{self} [--path=<path>] [-v...] <target> request <user>/<repo> create <local_branch> <title> [--branch=<remote>] [--message=<message>]
25
26
{self} [--path=<path>] [-v...] <target> request <user>/<repo> create <remote_branch> <local_branch> <title> [--branch=<remote>] [--message=<message>]
26
- {self} [--path=<path>] [-v...] <target> gist (list|ls) [<gist>]
27
- {self} [--path=<path>] [-v...] <target> gist clone <gist>
28
- {self} [--path=<path>] [-v...] <target> gist fetch <gist> [<gist_file>]
29
- {self} [--path=<path>] [-v...] <target> gist create [--secret] <description> [<gist_path> <gist_path>...]
30
- {self} [--path=<path>] [-v...] <target> gist delete <gist> [-f]
27
+ {self} [--path=<path>] [-v...] <target> ( gist|snippet) (list|ls) [<gist>]
28
+ {self} [--path=<path>] [-v...] <target> ( gist|snippet) clone <gist>
29
+ {self} [--path=<path>] [-v...] <target> ( gist|snippet) fetch <gist> [<gist_file>]
30
+ {self} [--path=<path>] [-v...] <target> ( gist|snippet) create [--secret] <description> [<gist_path> <gist_path>...]
31
+ {self} [--path=<path>] [-v...] <target> ( gist|snippet) delete <gist> [-f]
31
32
{self} [--path=<path>] [-v...] <target> config [--config=<gitconfig>]
32
33
{self} [-v...] config [--config=<gitconfig>]
33
34
{self} --help
40
41
fork Fork (and clone) the repository from the service
41
42
create Make this repository a new remote on the service
42
43
delete Delete the remote repository
44
+ list Lists the repositories for a given user
43
45
gist Manages gist files
44
46
request Handles requests for merge
45
47
open Open the given or current repository in a browser
51
53
-v,--verbose Makes it more chatty (repeat twice to see git commands)
52
54
-h,--help Shows this message
53
55
56
+ Options for list:
57
+ <user> Name of the user whose repositories will be listed
58
+ -l,--long Show one repository per line, when set show the results
59
+ with the following columns:
60
+ STATUS, COMMITS, REQUESTS, ISSUES, FORKS, CONTRIBUTORS, WATCHERS, LIKES, LANGUAGE, MODIF, NAME
61
+
54
62
Options for add:
55
63
<name> Name to use for the remote (defaults to name of repo)
56
64
-t,--tracking=<branch> Makes this remote tracking for the current branch
86
94
87
95
Configuration options:
88
96
alias Name to use for the git remote
89
- url URL of the repository
90
97
fqdn URL of the repository
91
98
type Name of the service to use (github, gitlab, bitbucket)
92
99
101
108
token = yourapitoken
102
109
fqdn = custom.org
103
110
104
- {self} version {version}, Copyright ⓒ2016 Bernard `Guyzmo` Pratz
111
+ {self} version {version}, Copyright ©2016 Bernard `Guyzmo` Pratz
105
112
{self} comes with ABSOLUTELY NO WARRANTY; for more informations
106
113
read the LICENSE file available in the sources, or check
107
114
out: http://www.gnu.org/licenses/gpl-2.0.txt
112
119
import os
113
120
import sys
114
121
import json
122
+ import shutil
115
123
import logging
116
124
import pkg_resources
117
125
@@ -168,13 +176,13 @@ def _guess_repo_slug(self, repository, service):
168
176
if remote .name in (target , 'upstream' , 'origin' ):
169
177
for url in remote .urls :
170
178
if url .startswith ('https' ):
171
- if '.git' in url :
179
+ if url . endswith ( '.git' ) :
172
180
url = url [:- 4 ]
173
181
* _ , user , name = url .split ('/' )
174
182
self .set_repo_slug ('/' .join ([user , name ]))
175
183
break
176
184
elif url .startswith ('git@' ):
177
- if '.git' in url :
185
+ if url . endswith ( '.git' ) :
178
186
url = url [:- 4 ]
179
187
_ , repo_slug = url .split (':' )
180
188
self .set_repo_slug (repo_slug )
@@ -269,6 +277,13 @@ def store_gitconfig(self, val):
269
277
270
278
'''Actions'''
271
279
280
+ @register_action ('ls' )
281
+ @register_action ('list' )
282
+ def do_list (self ):
283
+ service = self .get_service (False )
284
+ service .list (self .user , self .long )
285
+ return 0
286
+
272
287
@register_action ('add' )
273
288
def do_remote_add (self ):
274
289
service = self .get_service ()
@@ -278,7 +293,7 @@ def do_remote_add(self):
278
293
alone = self .alone )
279
294
log .info ('Successfully added `{}` as remote named `{}`' .format (
280
295
self .repo_slug ,
281
- service .name )
296
+ self . remote_name or service .name )
282
297
)
283
298
return 0
284
299
@@ -323,9 +338,10 @@ def do_fork(self):
323
338
def do_clone (self , service = None , repo_path = None ):
324
339
service = service or self .get_service (lookup_repository = False )
325
340
repo_path = repo_path or os .path .join (self .path , self .target_repo or self .repo_name )
326
- if os .path .exists (repo_path ):
341
+ if os .path .exists (repo_path ) and os . listdir ( repo_path ) != [] :
327
342
raise FileExistsError ('Cannot clone repository, '
328
- 'a folder named {} already exists!' .format (repo_path ))
343
+ 'a folder named {} already exists and '
344
+ 'is not an empty directory!' .format (repo_path ))
329
345
try :
330
346
repository = Repo .init (repo_path )
331
347
service = RepositoryService .get_service (repository , self .target )
@@ -337,8 +353,8 @@ def do_clone(self, service=None, repo_path=None):
337
353
return 0
338
354
except Exception as err :
339
355
if os .path .exists (repo_path ):
340
- os . removedirs (repo_path )
341
- raise err from err
356
+ shutil . rmtree (repo_path )
357
+ raise ResourceNotFoundError ( err . args [ 2 ]. decode ( 'utf-8' )) from err
342
358
343
359
@register_action ('create' )
344
360
def do_create (self ):
@@ -418,6 +434,8 @@ def do_request_fetch(self):
418
434
419
435
@register_action ('gist' , 'ls' )
420
436
@register_action ('gist' , 'list' )
437
+ @register_action ('snippet' , 'ls' )
438
+ @register_action ('snippet' , 'list' )
421
439
def do_gist_list (self ):
422
440
service = self .get_service (lookup_repository = False )
423
441
if self .gist_ref :
@@ -431,6 +449,7 @@ def do_gist_list(self):
431
449
return 0
432
450
433
451
@register_action ('gist' , 'clone' )
452
+ @register_action ('snippet' , 'clone' )
434
453
def do_gist_clone (self ):
435
454
service = self .get_service (lookup_repository = False )
436
455
repo_path = os .path .join (self .path , self .gist_ref .split ('/' )[- 1 ])
@@ -440,24 +459,27 @@ def do_gist_clone(self):
440
459
return 0
441
460
442
461
@register_action ('gist' , 'fetch' )
462
+ @register_action ('snippet' , 'fetch' )
443
463
def do_gist_fetch (self ):
444
464
service = self .get_service (lookup_repository = False )
445
465
# send gist to stdout, not using log.info on purpose here!
446
466
print (service .gist_fetch (self .gist_ref , self .gist_file ))
447
467
return 0
448
468
449
469
@register_action ('gist' , 'create' )
470
+ @register_action ('snippet' , 'create' )
450
471
def do_gist_create (self ):
451
472
service = self .get_service (lookup_repository = False )
452
473
url = service .gist_create (self .gist_path , self .description , self .secret )
453
474
log .info ('Successfully created gist `{}`!' .format (url ))
454
475
return 0
455
476
456
477
@register_action ('gist' , 'delete' )
478
+ @register_action ('snippet' , 'delete' )
457
479
def do_gist_delete (self ):
458
480
service = self .get_service (lookup_repository = False )
459
481
if not self .force : # pragma: no cover
460
- if not confirm ('gist ' , self .gist_ref ):
482
+ if not confirm ('snippet ' , self .gist_ref ):
461
483
return 0
462
484
463
485
service .gist_delete (self .gist_ref )
0 commit comments