-
-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Makes firmware uploads to the cloud explicit. #79
Conversation
* stops making autodumps when run without arguments. * adds a separate `upload` command, to make it clear the data is leaving the local network * moves the backup / upload work to the main process: no more background processes * refactors the MTD code to work with cJSON objects instead of printing to stdout One side-effect of this change is that STDOUT isn't flushed anymore before trying to detect the sensors: all output happens after all the data has been collected. Another change is that the output skips the initial "---" marker, making it a "bare document" in YAML terms. Since we're only producing a single document, this shouldn't make any difference.
@widgetii, I've checked that the code compiles, but I didn't get to test it on a device yet (my camera is currently bricked, I'm working on reflashing it, but it's gonna take a while, as it involves soldering). So, if the patch looks good to you, I'd be grateful if you could see if it works on a real device. Otherwise, I'll be able to test it myself in mid-August. |
Given the following structure (presented here as JSON): ┌────────────────────────────────────────────────────────┐ │ { │ │ "rom": { │ │ "attr": "val", │ │ "other": 1.6 │ │ }, │ │ "ram": { │ │ "size": 4096, │ │ "name": "mRA\bM" │ │ }, │ │ "list" : [ │ │ "item1", │ │ "item2", │ │ [ │ │ "sub1", │ │ "sub2" │ │ ], │ │ "item3", │ │ [ │ │ [ "subsub1" ], │ │ [ 1, 2, { "val": 3, "spelled": "three" }, 4 ], │ │ [ "subsub3" ] │ │ ], │ │ "item4" │ │ ] │ │ } │ └────────────────────────────────────────────────────────┘ The old code produced: ┌────────────────────────────────────────────────────────┐ │ rom: │ │ attr: val │ │ other: 1.6 │ │ ram: │ │ size: 4096 │ │ name: "mRA\bM" │ │ list: │ │ - item1 │ │ - item2 │ │ - │ │ - sub1 │ │ - sub2 │ │ - item3 │ │ - │ │ - │ │ - subsub1 │ │ - │ │ - 1 │ │ - 2 │ │ - val: 3 │ │ spelled: three │ │ - 4 │ │ - │ │ - subsub3 │ │ - item4 │ └────────────────────────────────────────────────────────┘ The new code now gives: ┌────────────────────────────────────────────────────────┐ │--- │ │rom: │ │ attr: val │ │ other: 1.6 │ │ram: │ │ size: 4096 │ │ name: "mRA\bM" │ │list: │ │ - item1 │ │ - item2 │ │ - - sub1 │ │ - sub2 │ │ - item3 │ │ - - - subsub1 │ │ - - 1 │ │ - 2 │ │ - val: 3 │ │ spelled: three │ │ - 4 │ │ - - subsub3 │ │ - item4 │ └────────────────────────────────────────────────────────┘ Also added a basic test.
The wrong YAML output turned out to be a bug in the cYAML implementation, and it fundamentally couldn't handle nested lists correctly. I ended up rewriting the whole thing. Please take another look. |
Small layout difference. Edit: Original:
PR:
|
…lumn 0. This seems to have changed in the YAML 1.2.2 spec: https://yaml.org/spec/1.2.2/#21-collections american: - Boston Red Sox - Detroit Tigers - New York Yankees national: - New York Mets - Chicago Cubs - Atlanta Braves Previously: https://yaml.org/spec/1.2.1/#id2759963 american: - Boston Red Sox - Detroit Tigers - New York Yankees national: - New York Mets - Chicago Cubs - Atlanta Braves I find the old style to make much more sense, but whaddarayagonnado?
In this case, we either render the "rom" section as it was, or the "sensors" section. I find the "rom" style to make more sense, but the "sensors" style seems to be specified on the YAML 1.2.2 spec, so I implemented the change. I would gladly revert this last change, though, spec be damned. |
Hang on, in the last commit I've introduced a bug when rendering top-level lists. I'll see how I can fix it, but really, we should stick to the style in YAML 1.2.1 and earlier, and just drop that commit. @widgetii, @viktorxda, what do you think? |
Personally, as long as the syntax is conclusive I see no problem with both versions, but that needs to be decided by the maintainers. I can primarily give feedback or test the recent changes. Here is the output of the different versions: Original
PR YAML 1.2.1
PR YAML 1.2.2
|
This was broken by the hack introduced in the previous commit.
I've also fixed the handling of top-level lists, but I must say, my favorite is the "PR YAML 1.2.1", so I would drop these last two commits (would probably keep the tests). |
Thank you, looks very good, I'll test everything on my devices this weekend |
Hi @widgetii, did you get a chance to play with this PR? Also, any preference among the options presented in #79 (comment)? |
Not yet, may be this weekend. If colleagues can make tests on their real devices, let's merge it early |
Here is a output test from a ingenic device: ipctool-mipsel
One thing to note is the slight delay between the execution and the output, as previously mentioned. |
In this case it will be not valid YAML anymore |
I see. Otherwise I didn't notice any problems, here is a test sample from another device: openipc-hi3516ev300
|
Ok, let's merge then @gckzl thank for your efforts |
@widgetii, @viktorxda Thanks for your help. While working on the YAML code, I noticed it didn't handle empty strings, empty objects and empty arrays correctly: in that case, it would output invalid YAML (this limitation was present also before my re-write). I'll send a separate PR for this, as I didn't want to keep expanding this PR. |
This PR breaks output of https://github.com/OpenIPC/ipctool/blob/master/src/boards/xm.c#L47
After: |
upload
command, to make it clear the data is leaving the local networkOne side-effect of this change is that STDOUT isn't flushed anymore before trying to detect the sensors: all output happens after all the data has been collected.
Another change is that the output skips the initial "---" marker, making it a "bare document" in YAML terms. Since we're only producing a single document, this shouldn't make any difference.