Commit Graph

82 Commits (93bb6b8eafa054bf09bfd9d22689db069f59bcb5)

Author SHA1 Message Date
Matt Clay 836e0b59d2 Fix git remote url change detection. (#20587)
* Fix git remote url change detection.

When comparing paths, unfrackgitpath must be called on both sides
of the comparison. Otherwise comparisons involving symlinks will
return incorrect results.

* Re-enable git test on OS X.

* Return None from unfrackgitpath when path is None.
2017-01-23 16:09:42 -08:00
Baptiste Mille-Mathias d1bd526426 Document git module return values (#19485)
* Document git module return values

* Document git module return values

* Remove duplicate and added more variables
2017-01-08 15:33:51 +00:00
tedder 15e12d2cf2 git ssh wrapper: py3-compatability with strings
Wrap the fh.write(str) in b() to ensure the string is of the proper type in py2/py3. Otherwise, the following error occurs when using its ssh_wrapper:

    An exception occurred during task execution. The full traceback is:
    Traceback (most recent call last):
      File "/tmp/ansible_8r299r6t/ansible_module_git.py", line 1049, in <module>
        main()
      File "/tmp/ansible_8r299r6t/ansible_module_git.py", line 928, in main
        ssh_wrapper = write_ssh_wrapper()
      File "/tmp/ansible_8r299r6t/ansible_module_git.py", line 330, in write_ssh_wrapper
        fh.write(template)
    TypeError: 'str' does not support the buffer interface
2017-01-03 22:09:12 -08:00
Rob Cutmore 1da6a67c50 Add tests for Git remote URL changes (#16893)
* Update Git tests for set remote URL changes
* Git: report changed when needed in check mode
2016-12-22 13:46:47 -08:00
Robin Roth afca957396 Fix UnboundLocalError remote_head in git (#19057)
* Fix UnboundLocalError remote_head in git

Fixes #5505

The use of remote_head was a leftover of #4562.
remote_head is not necessary, since the repo is unchanged anyway and
after is set correctly.

Further changes:
* Set changed=True and msg once local_mods are detected and reset.
* Remove need_fetch that is always True (due to previous if) to improve
clarity
* Don't exit early for local_mods but run submodules update and
switch_version

* Add test for git with local modifications
2016-12-14 08:36:15 -08:00
Kevin Burke 114e3cb7a4 Fix typos in git.py (#19186) 2016-12-11 17:17:05 +01:00
Toshio Kuratomi 7319104552 Refreshed metadata for core modules 2016-12-08 11:25:35 -05:00
Fabio Alessandro Locati 18d022d808 Unquote urls in YAML - source_control (#5795) 2016-12-08 11:25:34 -05:00
David Wittman cc334a078b Set IdentitiesOnly=yes when using key_file (#5682)
Sets the SSH option `IdentitiesOnly=yes` in the SSH wrapper when a
`key_file` is provided to the git module. This option ensures that
the provided key is used. Otherwise, the system's ssh-agent could
provide undesired identities when connecting.

From ssh_config(5):

> Specifies that ssh(1) should only use the authentication identity and
> certificate files explicitly configured in the ssh_config files or
> passed on the ssh(1) command-line, even if ssh-agent(1) or a
> PKCS11Provider offers more identities. The argument to this keyword
> must be “yes” or “no”. This option is intended for situations where
> ssh-agent offers many different identities. The default is “no”.
2016-12-08 11:25:33 -05:00
Rob Cutmore 6a3969ca6b Git: indicate if remote url was changed or not (#5677) 2016-12-08 11:25:32 -05:00
Sam Doran 1c801ac574 Change example syntax on git module 2016-12-08 11:25:30 -05:00
Fahri Cihan Demirci 1ecb63f0e0 Fix String Type for Python 3 Branch Comparison
* Use the `to_native` conversion method to convert a command output to the
  appropriate form when looking for branch names in the command output,
  therefore avoiding a `TypeError` in Python 3.
2016-12-08 11:25:24 -05:00
Toshio Kuratomi e7fcfa981e Remove the yaml dep from the git module 2016-12-08 11:25:23 -05:00
Toshio Kuratomi fad760dc7a Fix git for py3
Comparing to the output of run_command() needs to use native strings

Also fix imports: We were relying on them coming from the import of
basic.  A few (like yaml) weren't imported at all.
2016-12-08 11:25:23 -05:00
Robin Roth 5446e6639f Fix git failure for use of depth with version (#5135)
* Fixes #5108
* before module fails with "fatal: A branch named 'STABLE' already
  exists." when depth is used on a fresh clone with a non-HEAD branch
2016-12-08 11:25:22 -05:00
Jamie Evans 606ac78a20 verify both tags and commits (#2654)
This fixes a bug where the module fails to verify tags.  I added a conditional statement in `verify_commit_sign()` that checks if `version` argument is a tag, if so, use `git verify-tag` instead.
2016-12-08 11:25:21 -05:00
John R Barker 25b6492d37 Bulk spelling improvement to modules-core (#5225)
* Correct spelling mistakes

* Correct more spelling issues

* merge conflict

* Revert typo in parms
2016-12-08 11:25:20 -05:00
Toopy 74be5a40f9 Fix git get_diff TypeError when fetch (#4881) 2016-12-08 11:25:12 -05:00
Robin Roth 2df69fb5d8 Speedup git module on clone and pull (#4562)
* remove redundant if submodules_updated

* speed up git by reducing remote commands

* run fetch only once
* run ls-remote less
  * don't run ls-remote if one would run fetch anyhow
* remove unnecessary remote_branch check in clone
  * kept if depth and version given

* fix fetch on old git versions
2016-12-08 11:25:04 -05:00
Toshio Kuratomi 45846127c5 to_text, to_bytes, and to_native now have surrogate_or_strict error handler (#4630)
On python3, we want to use the surrogateescape error handler if
available for filesystem paths and the like.  On python2, have to use
strict in these circumstances.  Use the new error strategy for to_text,
to_bytes, and to_native that allows this.
2016-12-08 11:24:57 -05:00
Anton Onufriev f5f1062d72 Remove colors from git-branch output for correct local search (#4545)
We got an error while switching on existent local branch
because git module can not find branch in function get_branches
if we have color.branch=always in git config.
2016-12-08 11:24:54 -05:00
Michael Scherer ee5a48b84d Port the module to run on python 3 (#4496)
One of the usual issue is that run_command return bytes,
so we have to adapt the string to either be bytes too,
or convert to string.

This result into that kind of traceback:

    Traceback (most recent call last):
      File \"/tmp/ansible_ej32yu2w/ansible_module_git.py\", line 1009, in <module>
        main()
      File \"/tmp/ansible_ej32yu2w/ansible_module_git.py\", line 873, in main
        git_version_used = git_version(git_path, module)
      File \"/tmp/ansible_ej32yu2w/ansible_module_git.py\", line 788, in git_version
        rematch = re.search('git version (.*)$', out)
      File \"/usr/lib64/python3.5/re.py\", line 173, in search
        return _compile(pattern, flags).search(string)
    TypeError: cannot use a string pattern on a bytes-like object

Another issue is filter being a object instead of a list.
2016-12-08 11:24:54 -05:00
Robin Roth ccddeb8cdc Clarify that refspec is needed to checkout a git hash (#4564)
fixes #1531
2016-12-08 11:24:54 -05:00
jctanner c73f9d0492 git: add a umask parameter (#4473)
Sources #10504
Fixes #10279
2016-12-08 11:24:51 -05:00
jctanner 53a0a64bda git: set the file:// protocol if needed and refactor HEAD parser (#4434)
* make HEAD parsing more robust
* Fail the module for any splitter errors
* fix combining depth and version on filepath urls by prepending file://

Addresses #907
2016-12-08 11:24:50 -05:00
Timmo Verlaan 159918a8ef Determine branch name more reliable (#907)
* Made some changes to determine branch name more reliable (it may contain slashes now).

* Determination of branch name more reliable, as per comment on PR #907
2016-12-08 11:24:50 -05:00
jctanner 7e65315d92 git: Use a local copy of unfrackpath to avoid using ansible.lib (#4426)
Fixes #4425
2016-12-08 11:24:50 -05:00
jctanner c60954605b git: If force=yes, apply --force to submodule updates to overwrite local changes (#4415)
Fixes #238
2016-12-08 11:24:50 -05:00
Rob Cutmore 09b06a601c Git: Determine if remote URL is being changed (#4243)
* Git: Determine if remote URL is being changed

Ansible reported there were no changes when only the remote URL for a
repo was changed. This properly tracks and reports when the remote URL
for a repo changes.

Fixes #4006

* Fix handling of local repo paths

* Git: Use newer method for fetching remote URL

* Git: use ls-remote to fetch remote URL

Using ls-remote to fetch remote URL is supported in earlier versions
of Git compared to using remote command.

* Maintain previous behavior for older Git versions

Previously whether or not the remote URL changed was not factored
into command's changed status. Git versions prior to 1.7.5 lack the
functionality used for fetching a repo's remote URL so these versions
will update the remote URL without affecting the changed status.
2016-12-08 11:24:50 -05:00
jctanner 634b1024d6 git: save changed submodules in check and non-check mode (#4392) 2016-12-08 11:24:49 -05:00
Dag Wieers 4ee9cc4b3f Add diff mode support to git module (#3364)
* Add diffmode support to git module

This patch adds missing diffmode support to the git module.

* Remodel get_diff() and calls to it

As proposed by @abadger

* Ensure we fetch the required object before performing a diff

Also we handle the return code ourselves, so don't leave this up to run_command().
2016-12-08 11:24:49 -05:00
Robin Roth 5d928ca13c Fix git shallow update (#3912)
* remove unused variables

* fetch branch name instead of HEAD

fix #3782, which was introduced by f1bacc1d3f9578f26d4ae2f66112cbb2509a7fe8

* disable git depth option for old git versions

fixes #3782
git support for `--depth` did not fully work in old git versions (before 1.8.2)
fall back to full clones/fetches on those versions

* raise required git version to 1.9.1 for depth option

* use correct depth argument in switch_version
2016-12-08 11:24:41 -05:00
Toshio Kuratomi eadef56a06 Add comment 2016-12-08 11:24:38 -05:00
Marius Gedminas 3a8a11d85f git: fix change testing when version is HEAD (#3025)
When `version` is not specified, it defaults to "HEAD".  "HEAD" is not a
remote tag, and it's not listed in the output of get_branches(), so we'd
keep repo_updated at the default value (None) and then return early with
changed=True in --check mode, even when before == after.

Fixes #3024.
2016-12-08 11:24:38 -05:00
Toshio Kuratomi b259c65b20 Revert "Fix git shallow update (#3794)" -- Broke integration tests: https://app.shippable.com/runs/57599a7897ae890c00c2898d
This reverts commit c26eb1217fae8703a7b9cd8ae708051c58fc9273.
2016-12-08 11:24:36 -05:00
Robin Roth 513c3bf287 Fix git shallow update (#3794)
* remove unused variables

* fetch branch name instead of HEAD

fix #3782, which was introduced by f1bacc1d3f9578f26d4ae2f66112cbb2509a7fe8

* disable git depth option for old git versions

fixes #3782
git support for `--depth` did not fully work in old git versions (before 1.8.2)
fall back to full clones/fetches on those versions
2016-12-08 11:24:36 -05:00
Michael Scherer 82df6f981e Improve error reporting when git binary fail (#3266)
Showing stderr or stdout is a great help to understand
when something go south.
2016-12-08 11:24:30 -05:00
Michael Scherer 54c71b9331 Add a better solution for the ssh_known_hosts issue
Fix https://github.com/ansible/ansible/issues/10172 too
2016-12-08 11:24:25 -05:00
Robin Roth 281398fdc2 fix git switch branches in combination with depth on old git versions (#3492)
* fix git switch branches in combination with depth

* the old implementation is correct, but relies on git working correctly
  (as only newer versions do)
* with some older git version (e.g. 1.8.3), git fetch remote branch does
  not work, if the branch does not yet exist locally
* this patch works around that without explicitly checking the git version
* future refactoring is needed to reduce the number of fetches to a
  minimum; but this patch makes the code "correct"

* add git version requirements to doc

* replace set-branches with git 1.7.1 compatible version
2016-12-08 11:24:20 -05:00
Rene Moser 885b8dc4d0 git: fix status to use porcelain, ignore user configuration
From the git status doc:

    --porcelain

        Give the output in an easy-to-parse format for scripts. This is similar to the short output, but will remain stable across Git versions and regardless of user configuration. See below for details.

User configuration can break the git module from working as expected.
2016-12-08 11:24:20 -05:00
Robin Roth c7cb1b28cd fall back to full clone if version is hash
if version is not a branch or tag (i.e. a hash), we need a full checkout to be able to switch to it
2016-12-08 11:24:19 -05:00
Robin Roth 8e5e5108d1 with depth only fetch actual version
* don't use refs/heads/branchname for branches
* for tags it's needed thou
* fixes #3456
2016-12-08 11:24:19 -05:00
Kyle Dyroff 58f30646ed Log git error stdout/stderr to fail_json (#3022) 2016-12-08 11:24:18 -05:00
Robin Roth b9e55a0877 make git updates respect depth (#3254)
* make git updates respect depth

until now `fetch` gets all tags and heads at full depth, this change
* uses `depth` argument for `fetch`
* only get the specified `version` in `fetch`

* fixes #14954

* treat combination of refspec and depth correctly

* be more conservative for non-depth fetch
2016-12-08 11:24:18 -05:00
Toshio Kuratomi 40948cfcc4 git still needs to have abspath applied to dest 2016-12-08 11:24:16 -05:00
Michael Scherer 3d415ac2da Use type='path' for path arguments for git module 2016-12-08 11:24:14 -05:00
Toshio Kuratomi f8f84f0491 Since we screenscrape output from git to tell us information we need to use the C locale when running commands.
Using another locale would mean that we get information that may have
the strings that we are looking for.

Fixes #2449
Fixes #2462
2016-12-08 11:24:03 -05:00
Jordan Bach b6213ffa80 git: set remote branch before switching versions when using depth argument 2016-12-08 11:23:59 -05:00
Jan Duzinkiewicz 9c6db69827 forcing git fetch if sha1 are equal between repos but branch exists only at remote
Add an explanatory comment to the code
2016-12-08 11:23:57 -05:00
Dmitry Labutin 60b1273d55 Github uses both HTTP and HTTPS protocols 2016-12-08 11:23:56 -05:00