Skip to content

Commit

Permalink
add new argument to not watch the copied folders
Browse files Browse the repository at this point in the history
  • Loading branch information
codingpaula committed May 7, 2024
1 parent 01a6bcf commit cc75fbe
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 deletions.
3 changes: 2 additions & 1 deletion livesync/livesync.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ def main():
parser.add_argument('--on-change', type=str, help='command to be executed on remote host after any file change')
parser.add_argument('--mutex-interval', type=int, default=10, help='interval in which mutex is updated')
parser.add_argument('--ignore-mutex', action='store_true', help='ignore mutex (use with caution)')
parser.add_argument('--no-watch', action='store_true', help='do not watch for changes')
parser.add_argument('rsync_args', nargs=argparse.REMAINDER, help='arbitrary rsync parameters after "--"')
args = parser.parse_args()

folder = Folder(args.source, args.target, ssh_port=args.ssh_port, on_change=args.on_change)
folder.rsync_args(' '.join(args.rsync_args))
sync(folder, mutex_interval=args.mutex_interval, ignore_mutex=args.ignore_mutex)
sync(folder, mutex_interval=args.mutex_interval, ignore_mutex=args.ignore_mutex, watch=not args.no_watch)


if __name__ == '__main__':
Expand Down
31 changes: 17 additions & 14 deletions livesync/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ def get_summary(folders: Iterable[Folder]) -> str:
return '\n'.join(folder.get_summary() for folder in folders).replace('"', '\'')


async def run_folder_tasks(folders: Iterable[Folder], mutex_interval: float, ignore_mutex: bool = False) -> None:
async def run_folder_tasks(
folders: Iterable[Folder],
mutex_interval: float, ignore_mutex: bool = False, watch: bool = True) -> None:
try:
if not ignore_mutex:
summary = get_summary(folders)
Expand All @@ -25,23 +27,24 @@ async def run_folder_tasks(folders: Iterable[Folder], mutex_interval: float, ign
print(f' {folder.source_path} --> {folder.target}', flush=True)
folder.sync()

for folder in folders:
print(f'Watch folder {folder.source_path}', flush=True)
asyncio.create_task(folder.watch())

while True:
if not ignore_mutex:
summary = get_summary(folders)
for mutex in mutexes.values():
if not mutex.set(summary):
break
await asyncio.sleep(mutex_interval)
if watch:
for folder in folders:
print(f'Watch folder {folder.source_path}', flush=True)
asyncio.create_task(folder.watch())

while True:
if not ignore_mutex:
summary = get_summary(folders)
for mutex in mutexes.values():
if not mutex.set(summary):
break
await asyncio.sleep(mutex_interval)
except Exception as e:
print(e)


def sync(*folders: Folder, mutex_interval: float = 10, ignore_mutex: bool = False) -> None:
def sync(*folders: Folder, mutex_interval: float = 10, ignore_mutex: bool = False, watch: bool = True) -> None:
try:
asyncio.run(run_folder_tasks(folders, mutex_interval, ignore_mutex=ignore_mutex))
asyncio.run(run_folder_tasks(folders, mutex_interval, ignore_mutex=ignore_mutex, watch=watch))
except KeyboardInterrupt:
print('Bye!')

0 comments on commit cc75fbe

Please sign in to comment.