tree 740d3d99b890eb2fea675162ae1d608baeddc674
parent 0d592b9399db95b8e8b935d45ad238a14aa4a12d
author hjd <hjd@chromium.org> 1490361609 -0700
committer Commit bot <commit-bot@chromium.org> 1490361609 -0700

[tracing] Move math utilities from base into their own subdirectory (attempt 2)

Reattempting after the last CL missed updating some references to tr.b.Range.

Script to rename imports:

function names {
  echo bbox2
  echo math
  echo quad
  echo rect
  echo running_statistics
  echo statistics
  echo piecewise_linear_function
  echo range
  echo range_utils
  echo sorted_array_utils
}

function update_exports {
  local path=$1
  sed -i '' "s!tr.exportTo('tr.b'!tr.exportTo('tr.b.math'!g" $path
}

function from_last_return {
  local path=$1
  local line=$(cat $path | grep return -nr | tail -1 | cut -d: -f2)
  awk "NR >= $line" $path
}

function get_exports {
  local path=$1
  from_last_return $path | grep "^    " | sed 's/,//g' | sed 's/    //g'
}

function update_imports {
  local path=$1
  get_exports $path | while read export; do
  find tracing dashboard -type f | grep 'html$' | xargs sed -i '' "s!tr.b.$export\([^A-Za-z]\)!tr.b.math.$export\1!g"
  done
}

files=$(find tracing dashboard -type f | grep 'html$')
gypifiles=$(find tracing dashboard -type f | grep 'gypi$')

names | while read name; do
  sed -i '' "s!tracing/base/$name.html!tracing/base/math/$name.html!g" $files
  sed -i '' "s!tracing/base/$name.html!tracing/base/math/$name.html!g" $gypifiles
  update_exports tracing/tracing/base/math/$name.html
  update_imports tracing/tracing/base/math/$name.html
done

BUG=catapult:#3425

Review-Url: https://codereview.chromium.org/2771723003
