Skip to content
Snippets Groups Projects
  • Gregory Szorc's avatar
    ced0d686ecb3
    convert: add config option to control storing original revision · ced0d686ecb3
    Gregory Szorc authored
    common.commit.__init__ sets saverev=True by default. The side effect
    of this is that the hg sink will always set the "convert_revision"
    extras key to the commit being converted.
    
    This patch adds a config option to disable this behavior.
    
    While most consumers will want "convert_revision" to be a) written
    b) with the exact Git commit that was converted, some have use cases
    that prefer otherwise. In my case, I am performing significant
    rewrites of a Git repository *before* it is fed into `hg convert`.
    I have to do this because `hg convert` does not easily support the kind
    of transform I desire, even with extensions. (For the curious, I am
    "linearizing" the history of a GitHub repo by removing merge commits
    which add little value to the final history. It isn't easy to do this
    during `hg convert` because of Mercurial's file copy/rename metadata
    requirements.)
    
    In my scenario, my pre-convert transform stores a "convert_revision"
    key in the Git commit object containing the original Git commit ID.
    I want this original Git commit ID carried forward to Mercurial. By
    disabling the setting of this extra during `hg convert` and copying
    the value from the Git commit object, I can have the final
    "convert_revision" extra key contain the original Git commit ID. An
    added test verifies this exact scenario.
    
    This feature could likely be implemented for other VCS sources. But
    until someone needs the feature, I'm inclined to hold off implementing.
    ced0d686ecb3
    History
    convert: add config option to control storing original revision
    Gregory Szorc authored
    common.commit.__init__ sets saverev=True by default. The side effect
    of this is that the hg sink will always set the "convert_revision"
    extras key to the commit being converted.
    
    This patch adds a config option to disable this behavior.
    
    While most consumers will want "convert_revision" to be a) written
    b) with the exact Git commit that was converted, some have use cases
    that prefer otherwise. In my case, I am performing significant
    rewrites of a Git repository *before* it is fed into `hg convert`.
    I have to do this because `hg convert` does not easily support the kind
    of transform I desire, even with extensions. (For the curious, I am
    "linearizing" the history of a GitHub repo by removing merge commits
    which add little value to the final history. It isn't easy to do this
    during `hg convert` because of Mercurial's file copy/rename metadata
    requirements.)
    
    In my scenario, my pre-convert transform stores a "convert_revision"
    key in the Git commit object containing the original Git commit ID.
    I want this original Git commit ID carried forward to Mercurial. By
    disabling the setting of this extra during `hg convert` and copying
    the value from the Git commit object, I can have the final
    "convert_revision" extra key contain the original Git commit ID. An
    added test verifies this exact scenario.
    
    This feature could likely be implemented for other VCS sources. But
    until someone needs the feature, I'm inclined to hold off implementing.