I have been working on an implementation of RSync specifically for Google Drive. I now have it synchronizing between client and server using many of the basic rsync options. I am limited on the time I have with which to develop it and test it, so am looking to find volunteers willing to use the software and identify issues. The project is hosted on git hub here:
GSync on Github
Update: I have published the GSync application to pypi.python.org.
https://pypi.python.org/pypi/gsync/0.1.0
To install using pypi, you just need to execute the following command:
$ sudo pypi-install gsync
It will autoresolve dependencies and install require packages. To install the pypi-install utility on debian, execute the following command:
$ sudo apt-get install python-stdeb
Thanks.
Craig,
ReplyDeletehear you need testers ... i am a bit of a noob, but as fedora user would like to help. hangout me if my services are required.
+hexi dizmal
Hi,
ReplyDeleteYou just need to install the GSync app and use to to synchronise documents with your drive account. Everything is local, i.e. your credentials, done through Google API's, so if you want to clear authority from your computer at any time, just remove the ~/.gsync directory. If you don't want to sync things remotely, you can sync between two local directories as well.
I just need people to use it as they would if using rsync to synchronise their documents. Any bugs found I aim to get fixed ASAP and hopefully get to a BETA release state.
Thanks
Craig
I am getting this..
ReplyDeleteTraceback (most recent call last):
File "/bin/gsync", line 131, in
args = docopt(doc, version = version, options_first = True)
TypeError: docopt() got an unexpected keyword argument 'options_first'
On Fedora 19, Thanks
I'll log it on github and see if I can see what's causing that. Any idea what version of docopt it is that you have?
DeleteHi, I have updated the README with installation instructions. You can now install GSync using pypi-install, which will download and install directly from pypi.python.org and resolve any dependencies.
DeleteOkay got it to work by updating docopt to the latest version however now I am getting..
ReplyDeleteDEBUG: 'Exception': File "/usr/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 360, in walk
names = self.listdir(top)
File "/usr/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 569, in listdir
ent = self.stat(path)
File "/usr/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 480, in stat
ents = self._query(parentId = parentId)
File "/usr/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 722, in _query
service = self.service()
File "/usr/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 193, in service
credentials = self._obtainCredentials()
File "/usr/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 345, in _obtainCredentials
credentials = flow.step2_exchange(code)
File "/usr/lib/python2.7/site-packages/google_api_python_client-1.2-py2.7.egg/oauth2client/util.py", line 132, in positional_wrapper
return wrapped(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/google_api_python_client-1.2-py2.7.egg/oauth2client/client.py", line 1283, in step2_exchange
headers=headers)
File "/usr/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 1570, in request
(response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
File "/usr/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 1317, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
File "/usr/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 1252, in _conn_request
conn.connect()
File "/usr/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 1021, in connect
self.disable_ssl_certificate_validation, self.ca_certs)
File "/usr/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 80, in _ssl_wrap_socket
cert_reqs=cert_reqs, ca_certs=ca_certs)
File "/usr/lib64/python2.7/ssl.py", line 387, in wrap_socket
ciphers=ciphers)
File "/usr/lib64/python2.7/ssl.py", line 141, in __init__
ciphers)
DEBUG: /usr/lib/python2.7/site-packages/libgsync/drive/__init__.py:363:walk(): Exception: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib
sent 0 bytes received 0 bytes 0.00 bytes/sec
DEBUG: /usr/bin/gsync:171:(): Crawlers finished, exiting
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
hi, how did you update the docopt lib?
ReplyDeletei'm kind of a python noob, so some basic install document would be very helpful. It took me a few minutes to figure out I had to pass the build and install commands to the setup.py ;)
so now I have the same error as Unknown
apparently, i'm even missing the lib:
ReplyDeleteTraceback (most recent call last):
File "/usr/local/bin/gsync", line 7, in
from docopt import docopt
ImportError: No module named docopt
I thought the setup.py would take care of that..?
I have the same prob. Did you figure it out?
Deleteactually, now that I have python-docopt installed(oops)....
DeleteI get this:
gsync
Traceback (most recent call last):
File "/usr/bin/gsync", line 131, in
args = docopt(doc, version = version, options_first = True)
TypeError: docopt() got an unexpected keyword argument 'options_first'
After install all libs by hand... a bit of hacking here and there (I was trying it on a QNAP NAS, an ARM apliance...) I got to the point of login in an pasting the key provided, but I get the error
ReplyDelete./gsync -r ./test drive://test
Error: String or Integer object expected for key, unicode found
Debug info
ReplyDeleteDEBUG: /opt/local/lib/python2.7/site-packages/libgsync/drive/__init__.py:285:_getCredentialStorage(): Loading storage
DEBUG: /opt/local/lib/python2.7/site-packages/libgsync/drive/__init__.py:195:service(): Authenticating
DEBUG: /opt/local/lib/python2.7/site-packages/libgsync/drive/__init__.py:205:service(): Loading Google Drive service from config
DEBUG: /opt/local/lib/python2.7/site-packages/libgsync/drive/__init__.py:216:service(): API has expired
DEBUG: /opt/local/lib/python2.7/site-packages/libgsync/drive/__init__.py:219:service(): Downloading API service
DEBUG: TypeError('String or Integer object expected for key, unicode found',): File "/opt/local/lib/python2.7/site-packages/libgsync/crawler.py", line 98, in run
self._walk(srcpath, self._walkCallback, self._dev)
File "/opt/local/lib/python2.7/site-packages/libgsync/crawler.py", line 61, in _walk
self._sync(d)
File "/opt/local/lib/python2.7/site-packages/libgsync/sync/__init__.py", line 30, in __call__
changes = self._sync(path)
File "/opt/local/lib/python2.7/site-packages/libgsync/sync/__init__.py", line 49, in _sync
dstFile = self.dst.getInfo(relPath)
File "/opt/local/lib/python2.7/site-packages/libgsync/sync/file/remote/__init__.py", line 58, in getInfo
info = drive.stat(path)
File "/opt/local/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 480, in stat
ents = self._query(parentId = parentId)
File "/opt/local/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 722, in _query
service = self.service()
File "/opt/local/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 231, in service
api.update(json.loads(apistr))
File "/opt/lib/python2.7/UserDict.py", line 157, in update
self[k] = v
File "/opt/lib/python2.7/shelve.py", line 133, in __setitem__
self.dict[key] = f.getvalue()
File "/opt/lib/python2.7/bsddb/__init__.py", line 279, in __setitem__
_DeadlockWrap(wrapF) # self.db[key] = value
File "/opt/lib/python2.7/bsddb/dbutils.py", line 68, in DeadlockWrap
return function(*_args, **_kwargs)
File "/opt/lib/python2.7/bsddb/__init__.py", line 278, in wrapF
self.db[key] = value
Error: String or Integer object expected for key, unicode found
DEBUG: ./gsync:171:(): Crawlers finished, exiting
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
Hi, didn't see these comments on here. Would you mind raising some tickets on github for these issues? I have made changes recently, are you all still suffering from these issues?
ReplyDeleteI'm opening the issue, I get the error with the latest version (as of 9/19/2013)
ReplyDeleteCheck the README for updated installation instructions using PyPi. I have registered GSync with PyPi now, so it should sort out many of the issues related to incompatible library versions and missing dependencies. Thanks. Remember to raise any issues on git hub!
ReplyDeleteThe packages listed appear to me as Debian-specific...Any idea's on getting this on Fedora?
ReplyDeleteDid you use pypi-install to install it?
DeleteOn fedora, I believe you need to install the python-fedora package:
Deleteyum install python-fedora
Once installed, you should be able to install using pypi-install or pip command:
pip install gsync
how do you launch the auth process?
ReplyDeleteI get this output:
gsync -r test drive://
Traceback (most recent call last):
File "/home/user/.virtualenvs/bin/gsync", line 146, in
from libgsync.crawler import Crawler
File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/crawler.py", line 4, in
from libgsync.sync import Sync
File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/sync/__init__.py", line 5, in
from libgsync.drive.mimetypes import MimeTypes
File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 19, in
gflags.FLAGS['positional_parameters_enforcement'].value = 'IGNORE'
File "/home/user/.virtualenvs/lib/python2.7/site-packages/gflags.py", line 1053, in __getitem__
return self.FlagDict()[name]
KeyError: 'positional_parameters_enforcement'
Someone else reported a similar issue. I'll look into this. Are you compiling from source or installing from pypi.python.org?
DeleteInstalled from pypi-install in debian and installed from pip in archlinux...
Deletesame issue
I'll submit a fix to the current 0.1.0 branch and regenerate the package. There must be a module dependency missing or something. We will find out soon enough...
DeleteI have made a change to the source on github, you can try installing from there. Or you could look at the change I just made and manually modify your installed version?
DeleteSee: https://github.com/iwonbigbro/gsync/commit/4652a102e983474b6427547fe7d890d1b41e760e
How do you generate auth file .gsync???
Deletegsync --debug /home/user/test drive://
DEBUG: /home/user/.virtualenvs/bin/gsync:152:(): {'--8-bit-output': False,
'--timeout': None,
'--times': False,
'--update': False,
'--verbose': False,
'--version': False,
'-F': False,
'-P': False}
DEBUG: /home/user/.virtualenvs/bin/gsync:159:(): Creating crawler for: /home/user/test
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py:175:__init__(): Initialising drive
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py:191:__init__(): Initialisation complete
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/crawler.py:85:run(): Source srcpath: /home/user/test
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/crawler.py:86:run(): Source basepath: /home/user
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/crawler.py:87:run(): Source path: test
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/sync/file/factory.py:10:create(): SyncFileFactory.create(/home/user)
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/sync/file/factory.py:25:create(): Creating SyncFileLocal(/home/user)
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/sync/file/factory.py:10:create(): SyncFileFactory.create(drive:///)
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/sync/file/factory.py:17:create(): Creating SyncFileRemote(drive://)
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/crawler.py:95:run(): Enumerating: /home/user/test
DEBUG: /home/user/.virtualenvs/bin/gsync:171:(): Crawlers finished, exiting
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
Authentication occurs just once, the first time a connection is established with your drive. To establish a connection, just specify a drive source or destination file like:
Deletegsync drive://somepath/in/your/drive ~/some/local/path
It will provide a URL for which you can obtain a GUID from Google that you paste into the command line prompt. Once authenticated, it caches the GUID in your ~/.gsync directory. To force authentication, just remove this directory.
There may be a bug in which empty directories are not being transferred. Ensure you have a file present in your source directory to upload.
Deletemore problems...
Deleterm -rf .gsync
gsync -v --debug drive://a3 ./a3
[...]
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py:469:stat(): Searching for a3 in path drive://
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py:474:stat(): Checking pcache for path: drive://a3
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py:477:stat(): * nothing found
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py:713:_query(): Checking gcache for parentId: root
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py:283:_getCredentialStorage(): Loading storage
DEBUG: 'Exception': File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 358, in walk
names = self.listdir(top)
File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 567, in listdir
ent = self.stat(path)
File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 478, in stat
ents = self._query(parentId = parentId)
File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 721, in _query
service = self.service()
File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 204, in service
credentials = self._obtainCredentials()
File "/home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py", line 322, in _obtainCredentials
raise EFileNotFound('data/client.json')
DEBUG: /home/user/.virtualenvs/lib/python2.7/site-packages/libgsync/drive/__init__.py:361:walk(): Exception: File not found: data/client.json
sent 0 bytes received 0 bytes 0.00 bytes/sec
DEBUG: /home/user/.virtualenvs/bin/gsync:171:(): Crawlers finished, exiting
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
Wow, not seen that in a while. There should be a directory in the install path somewhere that contains data/client.json. Try searching for it under /usr/local or /usr/lib. There is a hash of known paths I use, since pypi is not consistent with where it installs these to. I will need to update the map.
DeleteThese are the paths I currently search.
Delete# Locate the client.json file.
client_json_locations = [
'/usr/local/libgsync/data/client.json',
'/usr/share/libgsync/data/client.json',
'/usr/local/share/libgsync/data/client.json',
'/usr/lib/libgsync/data/client.json',
'/usr/libgsync/data/client.json',
os.path.join(os.path.dirname(__file__), 'data', 'client.json'),
]
this credentials doen't belong to me...
Deletefind . | grep client.json
./libgsync/data/client.json
(.virtualenvs)[user@virtualarch .virtualenvs]$ cat ./libgsync/data/client.json
{
"installed": {
"client_id": "542942405111.apps.googleusercontent.com",
"client_secret": "Y4iSAluo7pCY57m8HFOfv2W_",
"redirect_uris": [ "http://localhost", "urn:ietf:oauth:2.0:oob" ],
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token"
}
}
These aren't credentials, these are the identification tokens for the GSync client, to present to your Google account services. When you authenticate and navigate to the URL, Google ask you if you want to grant permission to the GSync app to access your Google Drive. This only permits the app to access your drive if the app provides the key that Google will return to you once you permit it. It is this key that you paste into GSync. This key is then stored in your ~/.gsync directory. You can change this in your Google account settings at any time. It's a fundamental mechanism for how Google provide authentication. It's the same mechanism used by Android apps on your phone. Each app will have it's own client.json file. The client.json file is generated especially for GSync.
DeleteThe app never authenticate or ask to navigate to the url...
Deleteeven when I remove .gsync
When authenticating, your should see this message:
DeleteAuthorization is required to access your Google Drive.
Navigate to the following URL:
Type in the received code:
It is the unique code you receive that when combined with the client.json secret (which is actually not very secret), create the authentication request for the client to access your drive.
See: https://developers.google.com/accounts/docs/OAuth2
That is odd. The only way for it to not prompt you is if it doesn't get to the client.json step. But you already provided debug that suggested it was looking for the client.json file, so I don't understand. Is it now finding the client.json file or still erroring with the EFIleNotFound exception?
DeleteThese client tokens do have a life span unless it is a refresh token. Refresh tokens allow the client to dynamically generate a new token, for which it will require you to authenticate. I assume this only happens when a refresh token has expired and a new one is required. I don't currently use refresh tokens, and this token doesn't seem to have expired yet, so I am not sure what else could be wrong.
DeleteI've change path to client.json....
Deletegsync find it and ask for URL authorize but ... I get this
http://pastebin.com/RpGhKNUG
Ah yes, I was looking at this issue last night. There was an issue I thought I fixed, relating to specifying files as opposed to directories. It thinks that Copy.pdf should be a directory and tries to traverse it, but in reality it should come back as a file and get copied. The only test case I found where this didn't happen was if the remote file didn't exist. I presume the file does exist and therefore this issue hasn't been fixed?
Deletehttps://github.com/iwonbigbro/gsync/commit/12b29b177e072fd24e87b23945641e73f2f67978
Looking more closely at your debug, it does find Copy.pdf, but it doesn't identify that it is a file and tries to look for more files that have a parent with the ID of that file. I should be able to fix this over the weekend.
DeleteWhat path did you add to the client.json map in the end? I will also add this change so I you don't get a repeat when you install the new version.
not working in upload either...
Deletehttp://pastebin.com/ZNx2kWFf
the path for client.json depends on my virtualenv for python2.7 in archlinux,
Delete~/.virtualenvs/libgsync/data/client.json
can you send me your email? hate captcha from blogger
It would be nice to make it possible to run on Funplud for DLINK NAS devices (backup po Gdrive and docs on DNS NAS)
ReplyDeletehttp://nas-tweaks.net/371/hdd-installation-of-the-fun_plug-0-7-on-nas-devices/
You only need python and prerequisite libraries. It sounds like getting Linux onto the NAS is your first port of call. I had a Buffalo NAS I flashed with Debian once upon a time. Now I have an MK802 with a USB HDD running Debian armhf.
DeleteHi Craig!
ReplyDeleteI have also found the bug described by Ruben Ochoa.
Have you looked toward fixing it? I'm very keen on using your helpful tool.
I do:
gsync --debug -v /home/entropy/log.log drive://log.log
My debug is here: http://pastebin.com/20TxSGGN
Thanks!
Hi. I thought I had fixed it. Are you using the latest version from pypi?
DeleteHi Craig!
ReplyDeleteI'm trying to run the script from OS X 10.6.8. Python and tools were installed via brew, and gsync was installed using pip. I was able to authenticate the first time, but after that I get this each time:
DEBUG: TypeError('__init__() keywords must be strings',): File "/usr/local/bin/gsync", line 55, in
crawler = Crawler(p, dest)
File "/Library/Python/2.6/site-packages/libgsync/crawler.py", line 34, in __init__
info = self._drive.stat(self._src)
File "/Library/Python/2.6/site-packages/libgsync/drive/__init__.py", line 525, in stat
df = DriveFile(path = _Drive.unicode(path), **ent)
Error: __init__() keywords must be strings
I ran it like this:
$ gsync -riv drive://somefolder /path/to/mylocalfolder
Thanks!
What version of python are you using? This is a known python bug with version 2.6. It's fixed in python 2.7
DeleteAh, it's 2.6.1! Hopefully, I can update to 2.7 via brew. Thank you!
DeleteThis comment has been removed by the author.
ReplyDeleteFirst of all thanks for this tool, make my live more easy.
ReplyDeleteI using in my nas (QNAP, with python 2.7) and work right, the only problem is the ~/.gsync, in the nas the space of home folder is very small and cleared in any restart. I solved moving and linking in a script. It's possible to add a option to select a different path to the configuration directory?
Other enhancement, it's possible to add a log file?
Hi Craig, I am very interested in trying this.I currently back up my whole Fedora 20 box using rsync on a nightly basis. The problem is that this is done to a second drive in the same machine. A good backup if the drive fails, but not so good if there is a fire or theft type problem.
ReplyDeleteI was hoping to be able to rsync to Google Drive so your tool might be just what I am looking for. Looking at your README however I don't see all the options listed that I currently use.
The rsync command I use is:
rsync -ash --delete --exclude=/lots/of/unnecessary/directories / /the/place/where/my/second/drive/is/mounted --log-file=/the/same/place/rsync_log.log
I could live without the --log-file, but can you tell me if the other parameters (-ash --delete --exclude) are supported?
Thanks!
p.s. Forgot to add the "Notify me" flag to the above post so just doing that here...
ReplyDeleteHi. Not currently, but I will be implementing those as soon as I can find time to. The project had stalled just recently because I'm struggling to find time, but that should change very soon.
DeleteThis comment has been removed by the author.
ReplyDeleteRight, got gsync on my nas (zyxel nsa325) and authenticated.
ReplyDeleteWhen I enter gsync --debug -v drive://testt /mnt/HD_a2/public/googletest/docs_pics
I get
http://pastebin.com/P7feic7A
Any pointers as to what try next?
Nice work Craig, seems to be working well for me.
ReplyDeleteUbuntu 12.04 on an HP Microserver:
sudo apt-get python-pip
sudo pip install gsync
For me, gsync --authenticate didn't do anything, but just specifying source and destination worked:
gsync localtest/ drive://remotetest/
Copy the URL and authorise in your browser, copy the code back to SSH, and it seems to be happily uploading. I've yet to try a proper sync to see how it behaves with existing files.
Ok, there was something wrong in my input. The command does seem to work. One issue is that i have to authenticate each time i reboot the device.
ReplyDelete... and only directories are created on drive, no files uploaded. Verbose output does iterate through all the files, but none are uploaded.
DeleteAfter some initial success I now have the same issue as Bobby Zw. Running with --debug, relevant output below:
ReplyDeleteDEBUG: drive/:445:_findEntity(): Iterating 4 entities to find '_IMG_3847.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_3717.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Zebra Proxima__MG_4718.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Juvenile Swallow-tailed Bee-Eater__MG_2708.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_5462.jpg'
DEBUG: sync/file/remote/:63:getInfo(): File not found: 'drive://_IMG_3847.jpg'
DEBUG: drive/:509:stat(): Got 4 entities back
DEBUG: drive/:445:_findEntity(): Iterating 4 entities to find '_IMG_3847.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_3717.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Zebra Proxima__MG_4718.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Juvenile Swallow-tailed Bee-Eater__MG_2708.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_5462.jpg'
DEBUG: drive/:665:create(): Creation failed:
DEBUG: sync/file/remote/:88:_createFile(): Creation failed
DEBUG: sync/file/remote/:91:_updateFile(): Updating remote file: 'drive://_IMG_3847.jpg'
DEBUG: sync/file/local/:30:getInfo(): Fetching local file metadata: '_IMG_3847.jpg'
DEBUG: drive/:509:stat(): Got 4 entities back
DEBUG: drive/:445:_findEntity(): Iterating 4 entities to find '_IMG_3847.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_3717.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Zebra Proxima__MG_4718.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Juvenile Swallow-tailed Bee-Eater__MG_2708.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_5462.jpg'
DEBUG: drive/:678:update(): No such file: 'drive://_IMG_3847.jpg'
DEBUG: sync/file/remote/:116:_updateFile(): Update failed
DEBUG: drive/:509:stat(): Got 4 entities back
DEBUG: drive/:445:_findEntity(): Iterating 4 entities to find '_IMG_3847.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_3717.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Zebra Proxima__MG_4718.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Juvenile Swallow-tailed Bee-Eater__MG_2708.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_5462.jpg'
DEBUG: sync/file/remote/:63:getInfo(): File not found: 'drive://_IMG_3847.jpg'
Also:
ReplyDeleteDEBUG: drive/:445:_findEntity(): Iterating 4 entities to find '_IMG_3847.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_3717.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Zebra Proxima__MG_4718.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'Juvenile Swallow-tailed Bee-Eater__MG_2708.jpg'
DEBUG: drive/:450:_findEntity(): comparing u'_IMG_3847.jpg' to u'_IMG_5462.jpg'
DEBUG: drive/:665:create(): Creation failed:
DEBUG: sync/file/remote/:88:_createFile(): Creation failed