summaryrefslogtreecommitdiffstats
path: root/project.py
Commit message (Collapse)AuthorAgeFilesLines
...
* Handle Windows line endings when reading binary filesRenaud Paquay2017-08-311-3/+3
| | | | | | | | | Without this change, '.git\HEAD' files, for examples, are sometime read incorrectly resulting in the current branch to be reset to "master" when running a "repo init -b xxx" on an already initialized repository. Change-Id: I48c7ef85ff81626edf156914329a560e14252f2a
* Merge "Add option '--no-cert-checks' for 'upload' sub command."David Pursehouse2017-08-301-4/+7
|\
| * Add option '--no-cert-checks' for 'upload' sub command.Łukasz Gardoń2017-08-231-4/+7
| | | | | | | | | | | | | | This option allow to bypass verification ssl certification while establishing connection with Gerrit to upload review. Change-Id: If2e15f5a273c18a700eb5093ca8a4d5a4cbf80cd
* | Merge changes from topic "windows-support"David Pursehouse2017-08-301-11/+14
|\ \ | | | | | | | | | | | | | | | | | | | | | * changes: Port os.rename calls to work on Windows Workaround shutil.rmtree limitation on Windows Add support for creating symbolic links on Windows Make "git command" and "forall" work on Windows
| * | Port os.rename calls to work on WindowsRenaud Paquay2017-05-291-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | os.rename fails on Windows if the destination exists, so replace os.rename to platform_utils.rename which handles the platform differences. Change-Id: I15a86f10f65eedee5b003b80f88a0c28a3e1aa48
| * | Workaround shutil.rmtree limitation on WindowsRenaud Paquay2017-05-291-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By default, shutil.rmtree raises an exception when deleting readonly files on Windows. Replace all shutil.rmtree with platform_utils.rmtree, which adds an error handler to make files read-write when they can't be deleted. Change-Id: I9cfea9a7b3703fb16a82cf69331540c2c179ed53
| * | Add support for creating symbolic links on WindowsRenaud Paquay2017-05-291-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace all calls to os.symlink with platform_utils.symlink. The Windows implementation calls into the CreateSymbolicLinkW Win32 API, as os.symlink is not supported. Separate the Win32 API definitions into a separate module platform_utils_win32 for clarity. Change-Id: I0714c598664c2df93383734e609d948692c17ec5
* | | Print a message when fetching is skipped for an immutable refZac Livingston2017-08-251-4/+6
| |/ |/| | | | | | | | | | | | | | | The output indicates that fetching happens even when it is skipped. To avoid confusion, print a message when fetching is skipped for an immutable ref so that the user knows when and why a fetch is skipped. Change-Id: Id6e4812cebc5e57d379feb76a9d034af0b93043b
* | Revert "Migrate git-repo to create private changes rather than drafts"Jonathan Nieder2017-08-081-1/+9
| | | | | | | | | | | | | | | | This reverts commit d88f53e2b9634b9645f80b2d8e653beac24711fe. I merged it too hastily without paying enough attention to compatibility with released Gerrit versions. Change-Id: I4028d4737df1255f11e217da183a19a010597d5b
* | Migrate git-repo to create private changes rather than draftsChangcheng Xiao2017-08-071-9/+1
| | | | | | | | | | | | | | | | Considering that some users might expect changes created with '-d' option are not public. Private changes may be a better choice here than work-in-progress changes. Change-Id: I46a8fb9ae38beb41cf96d6abe82bea6db2439669
* | Add options for git-repo to support private and wip changesChangcheng Xiao2017-08-071-0/+11
| | | | | | | | | | | | | | This change adds options for git-repo tool to support private changes and work-in-progress changes. Change-Id: I343491f5949f06f1580d53f9cc0dee2dca09130f
* | init: add missing submodule argMartin Kelly2017-07-101-2/+2
|/ | | | | | | | | The submodule argument to Sync_LocalHalf was missing in MetaBranchSwitch, causing submodules not to get synced when the -b/--manifest-branch argument to init is used. Change-Id: Ie86d271abac2020725770be36ead83be3326e64b Signed-off-by: Martin Kelly <mkelly@xevo.com>
* sync: Add support to dump a JSON event log of all sync events.David Riley2017-05-291-3/+15
| | | | Change-Id: Id4852968ac1b2bf0093007cf2e5ca951ddab8b3b
* Fix misplaced file separator string.replace callRenaud Paquay2017-05-281-1/+1
| | | | | | | Project names are stored as path using the '/' file separator, and stored in a dictionary as keys. Change-Id: Ide40dfe840958ac0d46caae5f77f1a49d71c9d90
* Merge "init: add --submodules to sync manifest submodules"David Pursehouse2017-05-271-8/+41
|\
| * init: add --submodules to sync manifest submodulesMartin Kelly2017-05-231-8/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | repo sync can sync submodules via the --fetch-submodules option. However, if the manifest repo has submodules, those will not be synced. Having submodules in the manifest repo -- while not commonly done -- can be useful for inheriting a manifest from another project using <include> and layering changes on top of it. In this way, you can avoid having to deal with merge conflicts between your own manifests and the other project's manifests (for example, if you're managing an Android fork). Add a --submodule option to init that automatically syncs the submodules in the manifest repo whenever the manifest repo changes. Change-Id: I45d34f04517774c1462d7f233f482d1d81a332a8 Signed-off-by: Martin Kelly <mkelly@xevo.com>
* | project.py: fix performance issue with --reference when the mirrored ↵heping2017-04-121-4/+6
|/ | | | | | repository has many refs Change-Id: Id0183903597f872eee80ca32a8050125b187a3d4
* Merge "Fix removing broken symlink in reference dir"David Pursehouse2016-12-061-7/+8
|\
| * Fix removing broken symlink in reference dirCheuk Leung2016-06-291-7/+8
| | | | | | | | | | | | | | Re-ordered to first create the symlink before checking the source file and remove the destination if the source does not exists. Change-Id: Iae923ba2ef0ba5a8dc1b8e42d8cc3f3708f773af
* | Merge "Fix checkout error when depth passed to repo init and revision is a sha1"Dan Willemsen2016-10-281-21/+21
|\ \
| * | Fix checkout error when depth passed to repo init and revision is a sha1Aymen Bouaziz2016-10-281-21/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, if direct fetch of a sha1 is not supported by git server and depth option is used, we fallback on syncing the upstream branch by ignoring depth option. This fallback doesn't work in next 2 cases: (1) upstream attribute is not specified in manifest (2) depth option is passed to repo init command (not with clone-depth attribute in manifest) This commit do the following: - fixes (1) by updating condition used to apply fallback first we retry with depth set to None, then by syncing all branches - fixes (2) by passing depth as argument of _RemoteFetch() method thus, its value is not set again to depth value passed to repo init command when applying fallback Change-Id: Ifd6fffafc49ba229df624b0d7b64c83d47619d17
* | | _CheckDirReference: log actual error before suggesting --force-syncMarc Herbert2016-10-271-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A recent backward incompatible change created confusion and loss of productivity and highlighted the very limited amount of information provided when repo sync fails; merely recommending to --force-sync and blow-up git repos without any hint as to why. The addition of this basic _error(...) call would have provided a clue and will in the future. BUG=Issue 232 TEST=simulate a breakage similar to the ones reported at https://groups.google.com/a/chromium.org/forum/#!topic/chromium-os-dev/2-0oCy_CX5s cd .repo/projects/src/third_party/libapps.git/ file info; rm info; ln -s wronglink info cd - repo sync src/third_party/libapps/ # error message now shows the failure Change-Id: Idd2f177a096f1ad686caa8c67cb361d594ccaa57
* | | status: add -q/--quiet optionAndrew Wheeler2016-10-171-1/+7
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The --quiet option reduces the output to just a list of projects with modified workspaces (and orphans if -o is specified) A common use case is when performing a full-workspace merge. The integrator will kick-off a merge via: repo forall -c git merge <some tag> And then produce a short list of conflicted projects via: repo status -q The integrator can then iteratively fix and clean up all conficted components. The merge is complete when: repo status -q returns no output. Change-Id: Ibbba8713eac35befd8287c95948874e23fd5c7e2
* | implement optional 'pushurl' in the manifest fileSteve Rae2016-09-201-0/+4
| | | | | | | | | | | | | | | | Allow the 'remote' element in the manifest file to define an optional 'pushurl' attribute which is passed into the .git/config file. Change-Id: If342d299d371374aedc4440645798888869c9714 Signed-off-by: Steve Rae <steve.rae@raedomain.com>
* | Merge "Fix submodule checkout error when using sync-s option"David Pursehouse2016-09-141-1/+1
|\ \
| * | Fix submodule checkout error when using sync-s optionAymen Bouaziz2016-06-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When sync-s="true" option is used, the checkout of a submodule will try to use the revision attribute of the parent project. If this revision is a named reference, the checkout will fail if there is no reference with this name in the submodule. The proposed solution is to use the git commit id as revisionExpr for submodules. Change-Id: Ie8390a11957fd6a9c61289c6861d13cb3fa11678
* | | RepoHook: do not list options twice during hash based approvalJonathan Nieder2016-08-181-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of Do you want to allow this script to run (yes/yes-never-ask-again/NO)? (yes/always/NO)? ask Do you want to allow this script to run (yes/always/NO)? Change-Id: I5f5a2d0e88086a8d85e54fb8623a62d74a20956a Signed-off-by: Jonathan Nieder <jrn@google.com>
* | | Merge "project: Set config option to skip lfs smudge filter"David Pursehouse2016-08-171-0/+1
|\ \ \
| * | | project: Set config option to skip lfs smudge filterDavid Pursehouse2016-08-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During sync, repo runs `git read-tree --reset -u -v HEAD` which causes git-lfs's smudge filter to run. However this fails because git-lfs does not work with bare repositories. Add lfs.filter configuration to the project config as suggested in the comments on the upstream git-lfs client issue [1]. This prevents the smudge filter from running, and the sync completes successfully. For any projects that have LFS objects, `git lfs pull` must be executed. [1] https://github.com/github/git-lfs/issues/1422 Bug: Issue 224 Change-Id: I091ff37998131e2e6bbc59aa37ee352fe12d7fcd
* | | | RepoHook: allow users to approve hooks via manifestsMike Frysinger2016-08-161-22/+81
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The constant prompting when registered hooks change can be tedious and has a large multiplication factor when the project is large (e.g. the AOSP). It gets worse as people want to write more checks, hooks, docs, and tests (or fix bugs), but every CL that goes in will trigger a new prompt to approve. Let's tweak our trust model when it comes to hooks. Since people start off by calling `repo init` with a URL to a manifest, and that manifest defines all the hooks, anchor trust in that. This requires that we get the manifest over a trusted link (e.g. https or ssh) so that it can't be MITM-ed. If the user chooses to use an untrusted link (e.g. git or http), then we'll fallback to the existing hash based approval. Bug: Issue 226 Change-Id: I77be9e4397383f264fcdaefb582e345ea4069a13
* | | Merge "repo: Repo does not always handle '.' parameter correctly"David Pursehouse2016-08-141-1/+1
|\ \ \ | |_|/ |/| |
| * | repo: Repo does not always handle '.' parameter correctlyMark E. Hamilton2016-04-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The repo script allows a manifest to specify a '.' as the path the top-level directory, which co-locates the .git and .repo directories, and places files from the git repository at the top-level: <project name="proj_name" path="." /> <project name="sierra.other.git" path="other" /> Most commands work correctly with this setup. Some commands, however, fail to find the project. For instance, 'repo sync' works, and 'repo sync .' works in a sub-project ('other' in this case) but 'repo sync .' in the top-level directory fails with the error: error: project . not found There are two reasons for this: 1. The self.worktree attribute of the Project object is not normalized, so with a '.' for path its value would be '/my/project/root/.'. This is fine when used as a path, since it's the same path as '/my/project/root', but when used in a string comparison it fails. This commit applies os.path.normpath() to that value before storing it. 2. The _GetProjectByPath method in command.py was not checking the path against manifest.topdir, so even once it was normalized the project was not found. This commit adds a check against manifest.topdir if the loop drops out without finding a project. Change-Id: Ic84d053f1bbb5a357cad566805d5a326ae8246d2
* | | Merge "Fix variable assignment"David Pursehouse2016-06-291-1/+4
|\ \ \
| * | | Fix variable assignmentAymen Bouaziz2016-06-281-1/+4
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | If upstream string is empty, current_branch_only variable will be assigned to an empty string. This is not what we expect here as this variable is a boolean. Change-Id: Ibba935e25a74c2be1e50c88b4b403cf394ba365e
* | | Merge "Fix XmlManifest.Save with remotes that have 'alias' set"Dan Willemsen2016-04-221-1/+3
|\ \ \
| * | | Fix XmlManifest.Save with remotes that have 'alias' setDan Willemsen2016-04-221-1/+3
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the alias attribute is set for a remote, the RemoteSpec attached to a Project only contains the alias name used by git, not the original name used in the manifest. But that's not enough information to reconstruct the manifest, so save off the original manifest name as another RemoteSpec parameter, only used to write the manifest out. Bug: Issue 181 Bug: Issue 219 Change-Id: Id7417dfd6ce5572e4e5fe14f22924fdf088ca4f3
* / | diffmanifests: support custom git pretty format stringsSebastian Schuberth2016-04-211-4/+9
|/ / | | | | | | Change-Id: I29f4f1351c421f393328514d145df1a96aed9ee2
* | Fix symlinking of new projectsDan Willemsen2016-04-051-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We weren't copying these lists, so the += was actually changing the underlying lists. When a new project was added to the manifest, we run _CheckDirReference against the manifest project with share_refs=True, which added the working_tree_* to the shareable_* lists. Then, when we load the new manifest and create the new project, it uses the lists that already contain the working_tree_* files, even though we passed share_refs=False. This happens reliably under the above conditions, but doesn't seem to happen when syncing a fresh tree. So we've got a mixture of links that may need to be cleaned up later. This patch will just stop it from happening in the future. Change-Id: Ib7935bfad78af1e494a75e55134ec829f13c2a41
* | Merge changes from topic 'pylint-pep8-cleanup'David Pursehouse2016-03-151-110/+149
|\ \ | | | | | | | | | | | | | | | * changes: command.py: Cleaned up pylint/pep8 violations project.py: Cleaned up pylint/pep8 violations
| * | project.py: Cleaned up pylint/pep8 violationsMark E. Hamilton2016-03-021-110/+149
| |/ | | | | | | | | | | | | | | | | | | | | | | I noticed when running pylint (as the SUBMITTING_PATCHES file directs) that there were a number of violations reported. This makes it difficult to see violations I might have introduced. This commit corrects all pylint violations in the project.py script. This script now has a pylint score of 10.0, and no violations reported by pep8. Change-Id: I1462fd84f5b6b4c0dc893052671373e7ffd838f1
* / RepoHook: set __file__ when running the hookMike Frysinger2016-03-051-1/+1
|/ | | | | | | | | | | | | | | | | | | A common design pattern is to use __file__ to find the location of the active python module to assist in output or loading of related assets. The current hook systems runs the pre-upload.py hook in a context w/out that set leading to runtime errors: $ repo upload --cbr . ERROR: Traceback (most recent call last): File ".../repo/project.py", line 481, in _ExecuteHook self._script_fullpath, 'exec'), context) File ".../repohooks/pre-upload.py", line 32, in <module> path = os.path.dirname(os.path.realpath(__file__)) NameError: name '__file__' is not defined Define this variable in this context so code can safely use it. Change-Id: If6331312445fa61d9351b59f83abcc1c99ae6748
* Fix prune when bare git has detached headDan Willemsen2015-12-151-3/+4
| | | | | | | | | | | | | | | | We don't really use HEAD much in the bare git repositories, but there have been reports of errors in git-symbolic-ref: symbolic-ref: fatal: Refusing to point HEAD outside of refs/ That happen when the bare git repo is in the detached head state. It's possible that previous operations were killed while we were pruning branches. Use DetachHead instead of SetHead if we're restoring the repo into a detached head state. Change-Id: I9062e8957bc70367d3ded399685ac026fbb421fc
* Check for broken links when updating linkfilesDan Willemsen2015-11-181-1/+1
| | | | | | | | If a linkfile is a broken link (destination does not exist), and it needs to be updated, we didn't notice that it needed to be removed first. Use lexists instead of exists to check for this condition. Change-Id: I1f6a1f0193d3fd2b9f7a647836044997f6ab32eb
* Sync: Add option to prune refs during syncDavid Pursehouse2015-10-271-3/+8
| | | | | | | | By passing --prune to the sync command, the --prune option is given to the `git fetch`, causing refs that no longer exist on the remote to be removed. Change-Id: I3cedacce14276d96ac2d5aabf2d07fd05e92bc02
* _CopyAndLinkFiles even if the sources haven't changedDan Willemsen2015-09-031-0/+4
| | | | | | | The source or destination attributes may have changed even if the source didn't, so we need to make sure that these are up to date. Change-Id: I266ef3598ddda7e8c23bc9c6a049905ddc586348
* GITC: Add repo start support.Simran Basi2015-08-281-6/+12
| | | | | | | | | | | | | | | | | | | | | Add repo start support for GITC checkouts. If the user is in the GITC FS view, they can now run repo start to check out the sources and create a new working branch. When "repo start" is called on a GITC project, the revision tag is set to an empty string and saved in a new tag: old-revision. This tells the GITC filesystem to display the local copy of the sources when being viewed. The local copy is created by pulling the project sources and the new branch is created based off the original project revision. Updated main.py to setup each command's gitc_manifest when appropriate. Updated repo sync's logic to sync opened projects and updating the GITC manifest file for the rest. Change-Id: I7e4809d1c4fc43c69b26f2f1bebe45aab0cae628
* project.py: Improve message shown when hook is not replacedDavid Pursehouse2015-08-251-1/+1
| | | | | | | | | | If a hook file has been modified locally, it will not be replaced. Improve the message to make this clearer. Also change it from an error to a warning. Change-Id: I62c635390f24d2868db17717c247861b0381c99f
* project.py: Consistently use the _error method to print error messagesDavid Pursehouse2015-08-251-7/+8
| | | | | | | | Use the _error method instead of directly calling `print`. Also add a new _warn convenience method. Change-Id: Ia332c14ef8d9d1fe2df128dbf36b5521802ccdf1
* Merge "Support smart-sync through persistent-http[s]"Dan Willemsen2015-08-191-37/+2
|\
| * Support smart-sync through persistent-http[s]Dan Willemsen2015-08-191-37/+2
| | | | | | | | | | | | | | Use the same cookies and proxy that git traffic goes through for persistent-http[s] to support authentication for smart-sync. Change-Id: I20f4a281c259053a5a4fdbc48b1bca48e781c692