diff options
author | Guillem Jover <guillem@debian.org> | 2019-04-04 01:28:17 +0200 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2019-04-04 14:32:42 +0200 |
commit | 97729276414fca15d305e1ab62ff346eb13dcd4e (patch) | |
tree | 71f9e3a6f5df521de527598d752205b9130fb6b6 | |
parent | 69ba1b173fccf08a6411f7ec06066103bfeb6d07 (diff) |
smart-change: Add new --modified and --commit options
This should help work off the VCS.
The --modified option helps with the following workflow:
1) Modify english version; commit.
2) Modify translations; use smart_change with -m; commit.
The --commit option helps with the following workflow:
1) Modify english version; commit.
2) Modify translations; commit.
3) Use smart_change with -c from 2); commit.
-rw-r--r-- | Perl/Local/VCS_git.pm | 32 | ||||
-rwxr-xr-x | smart_change.pl | 33 |
2 files changed, 62 insertions, 3 deletions
diff --git a/Perl/Local/VCS_git.pm b/Perl/Local/VCS_git.pm index 9bbb17988f8..7f67d9f17e4 100644 --- a/Perl/Local/VCS_git.pm +++ b/Perl/Local/VCS_git.pm @@ -1268,6 +1268,38 @@ sub next_revision return $ret; } +=item @files = get_modified_files_from_worktree() + +Returns a list of modified files in the current worktree. + +=cut + +sub get_modified_files_from_worktree +{ + my $self = shift; + + my (@files) = qx(git ls-files -m); + chomp @files; + + return @files; +} + +=item @files = get_modified_files_from_revision($revid) + +Returns a list of modified files in $revid. + +=cut + +sub get_modified_files_from_revision +{ + my ($self, $rev) = @_; + + my (@files) = qx(git diff-tree --no-commit-id --name-only --diff-filter=M -r $rev); + chomp @files; + + return @files; +} + =item get_topdir Return the top dir of the webwml repository diff --git a/smart_change.pl b/smart_change.pl index 0814ac118d6..9f62ebbb5eb 100755 --- a/smart_change.pl +++ b/smart_change.pl @@ -16,15 +16,17 @@ use Local::VCS; use Webwml::TransCheck; use Webwml::Langs; -our ($opt_h, $opt_v, $opt_n, @opt_l, @opt_s); +our ($opt_h, $opt_v, $opt_n, @opt_l, @opt_s, $opt_m, $opt_c); sub usage { print <<'EOT'; -Usage: smart_change.pl [options] origfile [origfile ...] +Usage: smart_change.pl [options] [origfile...] Options: -h, --help display this message -v, --verbose run verbosely -n, --no-bump do not bump translation-check headers + -m, --modified use list of files from VCS modified files in current tree + -c, --commit=ID use list of files from VCS modified files in commit id -l, --lang=STRING process this language (may be used more than once) -s, --substitute=REGEXP Perl regexp applied to source files @@ -62,6 +64,8 @@ EOT if (not Getopt::Long::GetOptions(qw( h|help v|verbose + m|modified + c|commit=s n|no-bump p|previous l|lang=s@ @@ -71,6 +75,30 @@ if (not Getopt::Long::GetOptions(qw( exit(1); } +my $VCS = Local::VCS->new(); + +my @changed_files; + +if (not @ARGV and $opt_m) { + push @changed_files, $VCS->get_modified_files_from_worktree(); +} +if (not @ARGV and $opt_c) { + push @changed_files, $VCS->get_modified_files_from_revision($opt_c); +} + +if (not @ARGV and @changed_files) { + my %english_files; + foreach my $changed_file (@changed_files) { + next unless $changed_file =~ m{\.(?:wml|src)}; + next unless $changed_file =~ m{/}; + + my $english_file = $changed_file =~ s{^[^/]+}{english}r; + $english_files{$english_file} = 1; + } + + push @ARGV, sort keys %english_files; +} + $opt_h && usage; die "Invalid number of arguments\n" unless @ARGV; @@ -97,7 +125,6 @@ foreach my $argfile (@ARGV) { $argfile =~ m+^(english.*)/(.*\.(wml|src))+ or die "unknown path '$argfile'"; verbose("File: $argfile"); - my $VCS = Local::VCS->new(); my %file_info = $VCS->file_info($argfile); my $origrev = $file_info{'cmt_rev'} or die "Can't find revision information for original file $argfile\n"; verbose("Original revision: $origrev"); |