1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#!/system/bin/sh
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# found in the LICENSE file.
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# Android shell script to make the destination directory identical with the
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# source directory, without doing unnecessary copies. This assumes that the
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# the destination directory was originally a copy of the source directory, and
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# has since been modified.
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)source=$1
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)dest=$2
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)echo copying $source to $dest
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)delete_extra() {
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  # Don't delete symbolic links, since doing so deletes the vital lib link.
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if [ ! -L "$1" ]
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  then
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if [ ! -e "$source/$1" ]
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    then
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      echo rm -rf "$dest/$1"
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      rm -rf "$dest/$1"
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    elif [ -d "$1" ]
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    then
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      for f in "$1"/*
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      do
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)       delete_extra "$f"
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      done
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fi
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  fi
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)copy_if_older() {
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if [ -d "$1" ] && [ -e "$dest/$1" ]
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  then
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if [ ! -e "$dest/$1" ]
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    then
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      echo cp -a "$1" "$dest/$1"
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cp -a "$1" "$dest/$1"
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    else
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      for f in "$1"/*
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      do
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        copy_if_older "$f"
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      done
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fi
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  elif [ ! -e "$dest/$1" ] || [ "$1" -ot "$dest/$1" ] || [ "$1" -nt "$dest/$1" ]
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  then
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    # dates are different, so either the destination of the source has changed.
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    echo cp -a "$1" "$dest/$1"
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    cp -a "$1" "$dest/$1"
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  fi
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)if [ -e "$dest" ]
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)then
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  echo cd "$dest"
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cd "$dest"
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  for f in ./*
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  do
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if [ -e "$f" ]
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    then
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      delete_extra "$f"
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fi
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  done
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)else
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  echo mkdir "$dest"
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  mkdir "$dest"
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)fi
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)echo cd "$source"
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)cd "$source"
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)for f in ./*
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)do
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if [ -e "$f" ]
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  then
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    copy_if_older "$f"
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  fi
78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)done
79