Skip to content
Branch: master
Go to file

Latest commit

cgruber committed 4de8f47 Aug 9, 2018
…sses in place of @autovalue.

In the process, merge AbstractExpression with Expression, as AE is a needless layer.  Also, remove BinaryExpression which was needed for the validation logic, but after some consideration, that validation logic is overzealous, and all the Expression creation is basically local to the expressions package (except for RepositoryExpression which is the base case anyway). The whole validation bit was just overengineered.

Note: This definitely breaks the opensource, despite my attempts to make it work.  I've definitely updated the maven stuff, and it ought to work, but it's got its issues. I'm finding it slow going, fixing it by rebuilding MOE stuff, so I'm going to take this as a two-pronged approach, namely get this in and working internally, and then fixing the external build in a separate commit (possibly by fixing hte maven bits, or possibly my migrating to bazel).

Created by MOE:


Failed to load latest commit information.


Make Open Easy

LICENSE Travis CI GitHub Issues GitHub Pull Requests


MOE is a system for synchronizing, translating, and scrubbing source code repositories. Often, a project needs to exist in two forms, typically because it is released in open-source, which may use a different build system, only be a subset of the wider project, etc. Maintaining code in two repositories is burdensome. MOE allows users to:

  • synchronize (in either or both directions) between two source code repositories
  • use different types of repositories (svn, hg, git) in combinations
  • maintain "scrubbed" content in an internal or private repository.
  • transform project paths to support different layouts/structures in different repositories
  • propagate or hide individual commits, commit-authorship, and other metadata between repositories while syncing.

Project Status

MOE was created around 2011, but has not had a lot of love. Google teams that maintain open-source releases (guava, dagger, auto, etc.) use it regularly, so we dusted it off to share fixes, improvements, and help folks who use it outside of Google.

The project is currently undergoing a fair bit of re-factoring and needs a documentation update, which is forthcoming.


Building MOE

  1. Install Apache Maven 3.1 if you don't already have it 2. Checkout the Java-MOE source git clone 3. In the top-level directory that contains the build.xml file, run:
    • mvn install
    • util/
    1. The moe client binary should be created at client/target/moe

Running MOE

Once you have the moe binary, you should be able to simply run: moe <arguments for MOE>


Contributing to MOE is subject to the guidelines in the file, which, in brief, requires that contributors sign the Individual Contributor License Agreement (CLA).


  Copyright 2011 Google, Inc. All Rights Reserved.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  See the License for the specific language governing permissions and
  limitations under the License.


Make Opensource Easy - tools for synchronizing repositories




No releases published
You can’t perform that action at this time.