├── .bumpversion.cfg ├── .github ├── dependabot.yml └── weekly-digest.yml ├── .gitignore ├── .pylintrc ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── demo.gif ├── git_stalk ├── __init__.py └── stalk.py ├── pytest.ini ├── requirements.txt ├── setup.py ├── tests ├── __init__.py └── test_user_existence.py ├── tox.ini └── travis_requirements.txt /.bumpversion.cfg: -------------------------------------------------------------------------------- 1 | [bumpversion] 2 | current_version = 1.6.0 3 | commit = False 4 | tag = False 5 | 6 | [bumpversion:file:setup.py] 7 | 8 | [bumpversion:file:git_stalk/__init__.py] 9 | 10 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: pip 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "23:30" 8 | open-pull-requests-limit: 10 9 | -------------------------------------------------------------------------------- /.github/weekly-digest.yml: -------------------------------------------------------------------------------- 1 | # Configuration for weekly-digest - 2 | https://github.com/apps/weekly-digest 3 | publishDay: sun 4 | canPublishIssues: true 5 | canPublishPullRequests: true 6 | canPublishContributors: true 7 | canPublishStargazers: true 8 | canPublishCommits: true 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.pyc 3 | *.html 4 | __pycache__/ 5 | *.egg-info/ 6 | dist/ 7 | build/ 8 | .vscode/ 9 | .tox/ -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | [MASTER] 2 | 3 | # Specify a configuration file. 4 | #rcfile= 5 | 6 | # Python code to execute, usually for sys.path manipulation such as 7 | # pygtk.require(). 8 | #init-hook= 9 | 10 | # Add files or directories to the blacklist. They should be base names, not 11 | # paths. 12 | ignore=CSV 13 | 14 | # Add files or directories matching the regex patterns to the blacklist. The 15 | # regex matches against base names, not paths. 16 | ignore-patterns= 17 | 18 | # Pickle collected data for later comparisons. 19 | persistent=yes 20 | 21 | # List of plugins (as comma separated values of python modules names) to load, 22 | # usually to register additional checkers. 23 | load-plugins= 24 | 25 | # Use multiple processes to speed up Pylint. 26 | jobs=4 27 | 28 | # Allow loading of arbitrary C extensions. Extensions are imported into the 29 | # active Python interpreter and may run arbitrary code. 30 | unsafe-load-any-extension=no 31 | 32 | # A comma-separated list of package or module names from where C extensions may 33 | # be loaded. Extensions are loading into the active Python interpreter and may 34 | # run arbitrary code 35 | extension-pkg-whitelist= 36 | 37 | # Allow optimization of some AST trees. This will activate a peephole AST 38 | # optimizer, which will apply various small optimizations. For instance, it can 39 | # be used to obtain the result of joining multiple strings with the addition 40 | # operator. Joining a lot of strings can lead to a maximum recursion error in 41 | # Pylint and this flag can prevent that. It has one side effect, the resulting 42 | # AST will be different than the one from reality. This option is deprecated 43 | # and it will be removed in Pylint 2.0. 44 | optimize-ast=no 45 | 46 | 47 | [MESSAGES CONTROL] 48 | 49 | # Only show warnings with the listed confidence levels. Leave empty to show 50 | # all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED 51 | confidence= 52 | 53 | # Enable the message, report, category or checker with the given id(s). You can 54 | # either give multiple identifier separated by comma (,) or put this option 55 | # multiple time (only on the command line, not in the configuration file where 56 | # it should appear only once). See also the "--disable" option for examples. 57 | #enable= 58 | #enable=similarities,classes 59 | enable=all 60 | 61 | # Disable the message, report, category or checker with the given id(s). You 62 | # can either give multiple identifiers separated by comma (,) or put this 63 | # option multiple times (only on the command line, not in the configuration 64 | # file where it should appear only once).You can also use "--disable=all" to 65 | # disable everything first and then reenable specific checks. For example, if 66 | # you want to run only the similarities checker, you can use "--disable=all 67 | # --enable=similarities". If you want to run only the classes checker, but have 68 | # no Warning level messages displayed, use"--disable=all --enable=classes 69 | # --disable=W" 70 | #disable=all 71 | #disable=map-builtin-not-iterating,reduce-builtin,parameter-unpacking,buffer-builtin,raw_input-builtin,execfile-builtin,raising-string,cmp-method,old-octal-literal,suppressed-message,print-statement,import-star-module-level,indexing-exception,long-builtin,apply-builtin,dict-view-method,old-division,unicode-builtin,setslice-method,unichr-builtin,round-builtin,oct-method,next-method-called,unpacking-in-except,metaclass-assignment,using-cmp-argument,old-raise-syntax,cmp-builtin,file-builtin,old-ne-operator,basestring-builtin,xrange-builtin,useless-suppression,nonzero-method,standarderror-builtin,range-builtin-not-iterating,delslice-method,no-absolute-import,coerce-method,input-builtin,backtick,long-suffix,intern-builtin,coerce-builtin,zip-builtin-not-iterating,filter-builtin-not-iterating,reload-builtin,getslice-method,hex-method,dict-iter-method 72 | disable=missing-docstring,wildcard-import,no-method,too-few-public-methods,invalid-name,no-member,bad-continuation,redefined-variable-type,too-many-ancestors,len-as-condition,no-else-return,abstract-method,too-many-instance-attributes 73 | 74 | [REPORTS] 75 | 76 | # Set the output format. Available formats are text, parseable, colorized, msvs 77 | # (visual studio) and html. You can also give a reporter class, eg 78 | # mypackage.mymodule.MyReporterClass. 79 | output-format=text 80 | 81 | # Put messages in a separate file for each module / package specified on the 82 | # command line instead of printing them on stdout. Reports (if any) will be 83 | # written in a file name "pylint_global.[txt|html]". This option is deprecated 84 | # and it will be removed in Pylint 2.0. 85 | files-output=no 86 | 87 | # Tells whether to display a full report or only the messages 88 | reports=yes 89 | 90 | # Python expression which should return a note less than 10 (10 is the highest 91 | # note). You have access to the variables errors warning, statement which 92 | # respectively contain the number of errors / warnings messages and the total 93 | # number of statements analyzed. This is used by the global evaluation report 94 | # (RP0004). 95 | evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) 96 | 97 | # Template used to display messages. This is a python new-style format string 98 | # used to format the message information. See doc for all details 99 | #msg-template= 100 | 101 | 102 | [SPELLING] 103 | 104 | # Spelling dictionary name. Available dictionaries: none. To make it working 105 | # install python-enchant package. 106 | spelling-dict= 107 | 108 | # List of comma separated words that should not be checked. 109 | spelling-ignore-words= 110 | 111 | # A path to a file that contains private dictionary; one word per line. 112 | spelling-private-dict-file= 113 | 114 | # Tells whether to store unknown words to indicated private dictionary in 115 | # --spelling-private-dict-file option instead of raising a message. 116 | spelling-store-unknown-words=no 117 | 118 | 119 | [SIMILARITIES] 120 | 121 | # Minimum lines number of a similarity. 122 | min-similarity-lines=4 123 | 124 | # Ignore comments when computing similarities. 125 | ignore-comments=yes 126 | 127 | # Ignore docstrings when computing similarities. 128 | ignore-docstrings=yes 129 | 130 | # Ignore imports when computing similarities. 131 | ignore-imports=no 132 | 133 | 134 | [VARIABLES] 135 | 136 | # Tells whether we should check for unused import in __init__ files. 137 | init-import=no 138 | 139 | # A regular expression matching the name of dummy variables (i.e. expectedly 140 | # not used). 141 | dummy-variables-rgx=(_+[a-zA-Z0-9]*?$)|dummy 142 | 143 | # List of additional names supposed to be defined in builtins. Remember that 144 | # you should avoid to define new builtins when possible. 145 | additional-builtins= 146 | 147 | # List of strings which can identify a callback function by name. A callback 148 | # name must start or end with one of those strings. 149 | callbacks=cb_,_cb 150 | 151 | # List of qualified module names which can have objects that can redefine 152 | # builtins. 153 | redefining-builtins-modules=six.moves,future.builtins 154 | 155 | 156 | [TYPECHECK] 157 | 158 | # Tells whether missing members accessed in mixin class should be ignored. A 159 | # mixin class is detected if its name ends with "mixin" (case insensitive). 160 | ignore-mixin-members=yes 161 | 162 | # List of module names for which member attributes should not be checked 163 | # (useful for modules/projects where namespaces are manipulated during runtime 164 | # and thus existing member attributes cannot be deduced by static analysis. It 165 | # supports qualified module names, as well as Unix pattern matching. 166 | ignored-modules= 167 | 168 | # List of class names for which member attributes should not be checked (useful 169 | # for classes with dynamically set attributes). This supports the use of 170 | # qualified names. 171 | ignored-classes=optparse.Values,thread._local,_thread._local 172 | 173 | # List of members which are set dynamically and missed by pylint inference 174 | # system, and so shouldn't trigger E1101 when accessed. Python regular 175 | # expressions are accepted. 176 | generated-members= 177 | 178 | # List of decorators that produce context managers, such as 179 | # contextlib.contextmanager. Add to this list to register other decorators that 180 | # produce valid context managers. 181 | contextmanager-decorators=contextlib.contextmanager 182 | 183 | 184 | [MISCELLANEOUS] 185 | 186 | # List of note tags to take in consideration, separated by a comma. 187 | notes=FIXME,XXX,TODO 188 | 189 | 190 | [LOGGING] 191 | 192 | # Logging modules to check that the string format arguments are in logging 193 | # function parameter format 194 | logging-modules=logging 195 | 196 | 197 | [FORMAT] 198 | 199 | # Maximum number of characters on a single line. 200 | max-line-length=120 201 | 202 | # Regexp for a line that is allowed to be longer than the limit. 203 | ignore-long-lines=^\s*(# )??$ 204 | 205 | # Allow the body of an if to be on the same line as the test if there is no 206 | # else. 207 | single-line-if-stmt=no 208 | 209 | # List of optional constructs for which whitespace checking is disabled. `dict- 210 | # separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. 211 | # `trailing-comma` allows a space between comma and closing bracket: (a, ). 212 | # `empty-line` allows space-only lines. 213 | no-space-check=trailing-comma,dict-separator 214 | 215 | # Maximum number of lines in a module 216 | max-module-lines=1000 217 | 218 | # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 219 | # tab). 220 | indent-string=' ' 221 | 222 | # Number of spaces of indent required inside a hanging or continued line. 223 | indent-after-paren=4 224 | 225 | # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. 226 | expected-line-ending-format= 227 | 228 | 229 | [BASIC] 230 | 231 | # Good variable names which should always be accepted, separated by a comma 232 | good-names=i,j,k,ex,Run,_ 233 | 234 | # Bad variable names which should always be refused, separated by a comma 235 | bad-names=foo,bar,baz,toto,tutu,tata 236 | 237 | # Colon-delimited sets of names that determine each other's naming style when 238 | # the name regexes allow several styles. 239 | name-group= 240 | 241 | # Include a hint for the correct naming format with invalid-name 242 | include-naming-hint=no 243 | 244 | # List of decorators that produce properties, such as abc.abstractproperty. Add 245 | # to this list to register other decorators that produce valid properties. 246 | property-classes=abc.abstractproperty 247 | 248 | # Regular expression matching correct inline iteration names 249 | inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ 250 | 251 | # Naming hint for inline iteration names 252 | inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ 253 | 254 | # Regular expression matching correct attribute names 255 | attr-rgx=[a-z_][a-z0-9_]{2,30}$ 256 | 257 | # Naming hint for attribute names 258 | attr-name-hint=[a-z_][a-z0-9_]{2,30}$ 259 | 260 | # Regular expression matching correct function names 261 | function-rgx=[a-z_][a-z0-9_]{2,30}$ 262 | 263 | # Naming hint for function names 264 | function-name-hint=[a-z_][a-z0-9_]{2,30}$ 265 | 266 | # Regular expression matching correct variable names 267 | variable-rgx=[a-z_][a-z0-9_]{2,30}$ 268 | 269 | # Naming hint for variable names 270 | variable-name-hint=[a-z_][a-z0-9_]{2,30}$ 271 | 272 | # Regular expression matching correct module names 273 | module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ 274 | 275 | # Naming hint for module names 276 | module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ 277 | 278 | # Regular expression matching correct argument names 279 | argument-rgx=[a-z_][a-z0-9_]{2,30}$ 280 | 281 | # Naming hint for argument names 282 | argument-name-hint=[a-z_][a-z0-9_]{2,30}$ 283 | 284 | # Regular expression matching correct method names 285 | method-rgx=[a-z_][a-z0-9_]{2,30}$ 286 | 287 | # Naming hint for method names 288 | method-name-hint=[a-z_][a-z0-9_]{2,30}$ 289 | 290 | # Regular expression matching correct class names 291 | class-rgx=[A-Z_][a-zA-Z0-9]+$ 292 | 293 | # Naming hint for class names 294 | class-name-hint=[A-Z_][a-zA-Z0-9]+$ 295 | 296 | # Regular expression matching correct class attribute names 297 | class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ 298 | 299 | # Naming hint for class attribute names 300 | class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ 301 | 302 | # Regular expression matching correct constant names 303 | const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ 304 | 305 | # Naming hint for constant names 306 | const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ 307 | 308 | # Regular expression which should only match function or class names that do 309 | # not require a docstring. 310 | no-docstring-rgx=^_ 311 | 312 | # Minimum line length for functions/classes that require docstrings, shorter 313 | # ones are exempt. 314 | docstring-min-length=-1 315 | 316 | 317 | [ELIF] 318 | 319 | # Maximum number of nested blocks for function / method body 320 | max-nested-blocks=5 321 | 322 | 323 | [DESIGN] 324 | 325 | # Maximum number of arguments for function / method 326 | max-args=6 327 | 328 | # Argument names that match this expression will be ignored. Default to name 329 | # with leading underscore 330 | ignored-argument-names=_.* 331 | 332 | # Maximum number of locals for function / method body 333 | max-locals=15 334 | 335 | # Maximum number of return / yield for function / method body 336 | max-returns=6 337 | 338 | # Maximum number of branch for function / method body 339 | max-branches=15 340 | 341 | # Maximum number of statements in function / method body 342 | max-statements=50 343 | 344 | # Maximum number of parents for a class (see R0901). 345 | max-parents=7 346 | 347 | # Maximum number of attributes for a class (see R0902). 348 | max-attributes=7 349 | 350 | # Minimum number of public methods for a class (see R0903). 351 | min-public-methods=2 352 | 353 | # Maximum number of public methods for a class (see R0904). 354 | max-public-methods=20 355 | 356 | # Maximum number of boolean expressions in a if statement 357 | max-bool-expr=5 358 | 359 | 360 | [CLASSES] 361 | 362 | # List of method names used to declare (i.e. assign) instance attributes. 363 | defining-attr-methods=__init__,__new__,setUp 364 | 365 | # List of valid names for the first argument in a class method. 366 | valid-classmethod-first-arg=cls 367 | 368 | # List of valid names for the first argument in a metaclass class method. 369 | valid-metaclass-classmethod-first-arg=mcs 370 | 371 | # List of member names, which should be excluded from the protected access 372 | # warning. 373 | exclude-protected=_asdict,_fields,_replace,_source,_make 374 | 375 | 376 | [IMPORTS] 377 | 378 | # Deprecated modules which should not be used, separated by a comma 379 | deprecated-modules=optparse 380 | 381 | # Create a graph of every (i.e. internal and external) dependencies in the 382 | # given file (report RP0402 must not be disabled) 383 | import-graph= 384 | 385 | # Create a graph of external dependencies in the given file (report RP0402 must 386 | # not be disabled) 387 | ext-import-graph= 388 | 389 | # Create a graph of internal dependencies in the given file (report RP0402 must 390 | # not be disabled) 391 | int-import-graph= 392 | 393 | # Force import order to recognize a module as part of the standard 394 | # compatibility libraries. 395 | known-standard-library= 396 | 397 | # Force import order to recognize a module as part of a third party library. 398 | known-third-party=enchant 399 | 400 | # Analyse import fallback blocks. This can be used to support both Python 2 and 401 | # 3 compatible code, which means that the block might have code that exists 402 | # only in one or another interpreter, leading to false positives when analysed. 403 | analyse-fallback-blocks=no 404 | 405 | 406 | [EXCEPTIONS] 407 | 408 | # Exceptions that will emit a warning when being caught. Defaults to 409 | # "Exception" 410 | overgeneral-exceptions=Exception 411 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - "2.7" 4 | - "3.6" 5 | install: 6 | - pip install -r requirements.txt 7 | - pip install -r travis_requirements.txt 8 | script: 9 | - pytest --cov git_stalk --cov-report term-missing --cov-report xml 10 | - pytest --flakes 11 | - pytest --pep8 12 | - pytest --mccabe -m mccabe 13 | - pytest --pylint -m pylint 14 | notifications: 15 | email: false 16 | webhooks: https://fathomless-fjord-24024.herokuapp.com/notify 17 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | ## [1.4.2] - 2018-10-30 6 | 7 | ### Added 8 | 9 | - Fixed "since and until arguments error" by @VANKINEENITAWRUN. 10 | 11 | ## [1.4.1] - 2018-10-30 12 | 13 | ### Added 14 | 15 | - Replaced argparse with docopt as cli argument parser. 16 | 17 | ## [1.4.0] - 2018-10-30 18 | 19 | ### Added 20 | 21 | - Fixed bug " KeyError for Issue and Name" by @VANKINEENITAWRUN. 22 | 23 | ## [1.3.0] - 2018-10-26 24 | 25 | ### Added 26 | 27 | - Added --followers and --follows flags by @VANKINEENITAWRUN. 28 | 29 | ## [1.2.1] - 2018-10-25 30 | 31 | ### Bug Fixes 32 | 33 | - Fixed the application call with no arguments, now showing help by @rods-honorio 34 | 35 | ## [1.2.0] - 2018-10-23 36 | 37 | ### Added 38 | 39 | - Bump version: 1.1.1 → 1.2.0 by @aashutoshrathi 40 | - Updated .gitignore by @aashutoshrathi 41 | - Remove too-complex-functions warnings by @hyunchel 42 | - Added Bumpversion by @gpetrousov 43 | 44 | ## [1.1.1] - 2018-10-17 45 | 46 | ### Added 47 | 48 | - Replace Today string with date by @ammarmallik 49 | 50 | 51 | ## [1.1.0] - 2018-10-14 52 | 53 | ### Added 54 | 55 | - IP address shown on exceeding API call limit by @sayanmondal2098 56 | 57 | ### Bug Fixes 58 | 59 | - Fixed bug "AttributeError: 'dict' object has no attribute 'name' " by @Galixxon 60 | 61 | ## [1.0.9] - 2018-10-11 62 | 63 | ### Changes 64 | 65 | - Added --since and --until flags by @gpetrousov. 66 | - Events are filtered based on the flags above 67 | 68 | ## [1.0.8] - 2018-10-10 69 | 70 | ### Added 71 | 72 | - Added Starred repo tuple by @jeffreyrack. 73 | - String formatting instead of concatenation by @nityanandagohain. 74 | 75 | ## [1.0.7] - 2018-10-07 76 | 77 | ### Added 78 | 79 | - Test to check if invalid username by @Khukhuna. 80 | - Test to check if no internet by @Khukhuna. 81 | 82 | ## [1.0.6] - 2018-10-03 83 | 84 | ### Updated 85 | 86 | - Using global variable for URI from @bossbossk20 87 | - Throw error for non existing users from @Khukhuna 88 | 89 | ### Added 90 | 91 | - Date arguments for --until and --from by @bossbossk20 92 | - Docstrings 93 | 94 | ## [1.0.4 and 1.0.5] - 2018-10-02 95 | 96 | ### Added 97 | 98 | - GIF added to README by @NefixEstarda 99 | - Telegram web hook to Travis by @aashutoshrathi 100 | - Python3.5 101 | 102 | 103 | ## [1.0.3] - 2018-10-02 104 | 105 | ### Added 106 | 107 | - tox.ini and PEP8 108 | 109 | ## [1.0.2] - 2018-10-01 110 | 111 | ### Added 112 | 113 | - Filter by Organisation 114 | 115 | ## [1.0.0] - 2018-07-18 116 | 117 | ### Updated 118 | 119 | - View of tables and partitioned stars section. 120 | - Centered badges and description 121 | - Updated Readme 122 | 123 | ## [0.0.4] - 2018-06-06 124 | 125 | ### Added 126 | 127 | - FOSSBot License Checker 128 | 129 | ## [0.0.3] - 2018-06-04 130 | 131 | ### Added 132 | 133 | - Pretty printing of all events by user 134 | 135 | ## [0.0.2] - 2018-06-03 136 | 137 | ### Added 138 | 139 | - Test 140 | - Travis CI 141 | 142 | ## [0.0.1] - 2018-06-02 143 | 144 | ### Added 145 | 146 | - Functionality to search user on GitHub 147 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Aashutosh Rathi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
A command line interface for checking your/peer's activity today.
12 | 13 | 14 | ## Installation 15 | 16 | ```sh 17 | pip install git-stalk 18 | ``` 19 | 20 | ## Demo 21 | 22 |  23 | 24 | ## Limitations 25 | 26 | Stalking too much might lead to "API Rate Limit Exceeded for your IP". 27 | 28 | ## Releasing new version 29 | 30 | ```sh 31 | git checkout master 32 | git fetch 33 | git merge 34 | tox 35 | bumpversion minor --tag --commit 36 | git push origin master --tags 37 | ``` 38 | 39 | ## Author 40 | 41 | [Aashutosh Rathi](https://github.com/aashutoshrathi) 42 | 43 |Made from scratch by Aashutosh Rathi
52 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aashutoshrathi/git-stalk-cli/556b4873ca2aec1db43c7a190e4ee4add903c3f3/demo.gif -------------------------------------------------------------------------------- /git_stalk/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = '1.6.0' 2 | __author__ = 'Aashutosh Rathi